elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Confusión en cuanto a cambiar colores de películas en Flash.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Confusión en cuanto a cambiar colores de películas en Flash.  (Leído 1,909 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.217


Superhacker (es broma xD )


Ver Perfil
Confusión en cuanto a cambiar colores de películas en Flash.
« en: 29 Marzo 2024, 12:00 pm »

Intento hacer un generador de posibles dibujos, para eso se va variando qué pixel está negro o blanco, creo que se puede resumir en esto:
Código
  1. function Variar () {
  2. PixelaModificar = "ColordePixel"+Puntero;
  3. ColordePixelaModificar = eval(PixelaModificar);
  4. // ¿El pixel puede cambiar de color?
  5. if (ColordePixelaModificar<1) {
  6. // Sí, hacer los cambios:
  7. set (PixelaModificar, ColordePixelaModificar+1);
  8. Col = new Color("Pixel"+Puntero);
  9. Col.setRGB(parseInt(000000, 16));
Los nombres de las variables son confusos, no sé cómo mejorarlos, pero hay un pixel del cual se mira si puede cambiar de color (a negro, 1, 0 es blanco), y en tal caso se lo modifica.

El problema es que, supongo, se debería hacer de forma más directa, pero no sé cómo. Tengo ColordePixel1, ColordePixel2, etc, la cantidad de variables así va aumentando, todas son 0 o 1, y eso luego se usa para determinar si el pixel (Pixel1, Pixel2, etc) debe volverse negro o blanco. Para hacer ese cambio se crea una variable que es como una propiedad de una película (Pixel1, o Pixel2, etc), y luego se le asigna un valor que sería el color. También resulta curioso que al redefinir esa variable apuntando a otra película, el color de las películas anteriores que fueron definidas por ella no cambia. No me perjudica, de hecho podría ser mejor tener un montón de variables con 0 o 1, en vez de un montón con FFFFFF y 000000, pero al menos por curiosidad quisiera saber si se puede hacer de modo más directo y que me expliquen mejor qué hacen las 2 últimas líneas del código.

Lo normal, digamos, debería ser algo así:
Código:
Apuntar a un pixel.
Si su color es FFFFFF
   Ahora es 000000
Yo al principio creo variables para que las referencias a nombres o valores queden grabadas, ya que se usan más adelante, así no se tienen que concatenar cosas de nuevo, ese no es el problema. Lo del código que puse al inicio es como:
Código:
Apuntar a un pixel.
Si su color es 0
   Ahora es 1
   Crear una variable que marca el color del pixel.
   Asignarle 000000
¿Cómo se simplifica? Tengo 2 variables marcando el color, no puede ser. Una es eterna pero de por sí no lo cambia, y la otra varia a qué pixel apunta...


En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.068



Ver Perfil
Re: Confusión en cuanto a cambiar colores de películas en Flash.
« Respuesta #1 en: 30 Marzo 2024, 01:17 am »

No sé si entiendo bien tu pregunta pero estimo que quieres cambiar el color de un MovieClip dependiendo del color que tenga actualmente, para esto puedes recuperar el color con getRGB que tiene SIEMPRE Y CUANDO al momento de crearlos usaste setRGB

Por ejemplo yo puedo crear 25 cuadritos uno después de otro como si fuera un tablero, cada cuadrito de un color aleatorio entre blanco (0xFFFFFF) y negro (0x000000 o simplemente 0), luego reviso el color de cada cuadrito y comparo si es negro (0), si lo es le cambio a blanco (0xFFFFFF), sino lo cambio a negro (0)

Crear cuadritos:
Código
  1. var col = 0;
  2. var row = 0;
  3. for (var i = 0; i < 25; i++) {
  4.  _root.attachMovie( "cuadro", "cuadro"+i, i);
  5.  setProperty ("cuadro" + i, _x, col * 100);
  6.  setProperty ("cuadro" + i, _y, row * 100);
  7.  
  8.  c = new Color("cuadro" + i);
  9.  c.setRGB(genColor());
  10.  
  11.  col++;
  12.  if (col > 4) {
  13.    col = 0;
  14.    row++;
  15.  }
  16. }
  17.  
  18. function genColor() {
  19.  var colores = [0xFFFFFF, 0x000000];
  20.  return colores[random(colores.length)];
  21. }

Cambiar color:
Código
  1. for (var i = 0; i < 25; i++) {
  2.  var c = new Color("cuadro" + i);
  3.  if (c.getRGB() == 0) { //Si es negro
  4.    c.setRGB(0xFFFFFF);  //le ponemos blanco
  5.  } else {
  6.    c.setRGB(0) //Sino le ponemos negro
  7.  }
  8. }



... y que me expliquen mejor qué hacen las 2 últimas líneas del código.

La primera de esas dos crea una Objeto Color para la instancia (vínculo) de un MovieClip y le llama Col
La segunda especifica un color en formato RGB Hexadecimal (RRGGBB RedGreenBlue RojoVerdeAzul) para el Objeto Col creado anteriormente y como este está vinculado a una Instancia de un MovieClip, pues afecta a ese MovieClip

Están usando parseInt() para convertir un texto dado en base 16 (hexadecimal) a número, pero no es necesario porque directamente puedes especificar un número hexadecimal, es decir 0xFFFFFF para blanco y 0x000000 (o solo 0) para negro

El parseInt() está pensado más para cuando debes recibir un texto y convertirlo en número, por ejemplo de un cuadro de texto (txtColor) donde debe indicarlo el usuario y presionar un botón, si dicho usuario quiere el color verde pondrá: 00FF00 o FF00 en su cuadro de texto, luego tendrías que recuperar ese texto y convertirlo a número indicando que está en base 16 (hexadecimal)

Código
  1. on (release) {
  2.  c = new Color(c1);
  3.  c.setRGB(parseInt(txtColor, 16));
  4. }


En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.217


Superhacker (es broma xD )


Ver Perfil
Re: Confusión en cuanto a cambiar colores de películas en Flash.
« Respuesta #2 en: 31 Marzo 2024, 14:28 pm »

Estoy asombrado por la simpleza conque generas los píxeles, mi código tiene variables que debo ver si sobran o no, luego quizá te lo muestre para que, en lo posible, me digas cómo simplificarlo, si no me doy cuenta, o como anécdota.

Lo del array también está interesante, pensaré en aplicarlo.

Bien, todo bien. ¿Pero no te parece que sería más fácil algo como:
setProperty ("cuadro" + i, _color, FFFFFF);
? Si existiera eso. Me resulta absurdo que requiera tanto trámite. El cuadradito ya tiene un color, como bien has dicho y no sabía sería cuestión de captar cual con get y según eso cambiárselo, como cuando se le cambia la posición u otra propiedad. Uno no hace:
c = new XPosition("cuadro" + i);
c.set(genXPosition());
en vez de eso se pone:
setProperty ("cuadro" + i, _x, genXPosition());


Tal vez tiene que ver con la necesidad de que sea hexadecimal, no sé, asumo que es una imperfección de Flash. No me gustan los trámites absurdos xD

Bueno, voy a cambiar cosas y luego comento, pero no sé cuánto tardaré, tal vez 3 días.
« Última modificación: 31 Marzo 2024, 20:25 pm por Tachikomaia » En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.217


Superhacker (es broma xD )


Ver Perfil
Re: Confusión en cuanto a cambiar colores de películas en Flash.
« Respuesta #3 en: 7 Abril 2024, 08:30 am »

Quité el Parseint y simplifiqué el cambio de colores como me dijiste, dejo los archivos a quien le interesen:
https://drive.google.com/file/d/1z3lL4wWYmJ_SCZcZliXx7fK8dH4TdOUS/view?usp=sharing
Incluye la versión anterior y la nueva (simplificando).
El objeto Vacío en frame 3 está en la punta inferior derecha, tiene la función Variar.

Como alternativa, el código:
Código
  1.   actions for fotograma 1
  2.      // Los píxeles mayores están abajo en la derecha, ejemplo:
  3.      // 12
  4.      // 34
  5.      PixelesdeLargo = 1;
  6.      // En F3 se repite:
  7.      function Variar () {
  8.         // trace("Variando");
  9.         PixelaModificar = "Pixel"+Puntero;
  10.         ColorDePixel = new Color(PixelaModificar);
  11.         // trace("Color: "+ColorDePixel.getRGB());
  12.         // ¿El pixel puede cambiar de color? ¿es blanco?
  13.         if (ColorDePixel.getRGB() == 0xFFFFFF) {
  14.            // Sí, cambiarlo:
  15.            ColorDePixel.setRGB(0);
  16.            // trace ("Se pintó el pixel "+PixelaModificar);
  17.            // Para juzgar: ¿El dibujo es repetido? o:
  18.            // ¿El dibujo tiene píxeles pintados en toda columna y fila?
  19.            // Averiguar la columna del pixel:
  20.            Columna = 1+(Puntero-1)%PixelesdeLargo;
  21.            // trace ("Columna: "+Columna);
  22.            // Esto se usa para evitar repeticiones de concatenaciones y simplificarlas:
  23.            ColumnaRelevante = "PintadosenC"+Columna;
  24.            // Incrementar contador de píxeles pintados en ella:
  25.            set (ColumnaRelevante, eval(ColumnaRelevante)+1);
  26.            // Averiguar la fila del pixel:
  27.            Fila = Math.ceil(Puntero/PixelesdeLargo);
  28.            // trace ("Fila: "+Fila);
  29.            // Esto se usa para evitar repeticiones de concatenaciones y simplificarlas:
  30.            FilaRelevante = "PintadosenF"+Fila;
  31.            // Incrementar contador de píxeles pintados en ella:
  32.            set (FilaRelevante, eval(FilaRelevante)+1);
  33.            // trace ("Pintados: "+ColordePixel1+" "+ColordePixel2+" "+ColordePixel3+" "+ColordePixel4);
  34.            // trace ("PintadosenC1: "+PintadosenC1);
  35.            // trace ("PintadosenC2: "+PintadosenC2);
  36.            // trace ("PintadosenF1: "+PintadosenF1);
  37.            // trace ("PintadosenF2: "+PintadosenF2);
  38.            // Para juzgar: ¿El dibujo tiene píxeles pintados en toda columna y fila?
  39.            Puntero2 = 0;
  40.            Repetido = "N";
  41.            do {
  42.               Puntero2 = Puntero2+1;
  43.               // ¿La columna Puntero2 no tiene algún pixel pintado?
  44.               if (eval("PintadosenC"+Puntero2)<1) {
  45.                  // trace (eval("PintadosenC"+Puntero2)+ "< 1");
  46.                  Repetido = "S";
  47.               } else if (eval("PintadosenF"+Puntero2)<1) {
  48.                  // La fila Puntero2 no tiene algún pixel pintado.
  49.                  // trace (eval("PintadosenF"+Puntero2)+ "< 1");
  50.                  Repetido = "S";
  51.               }
  52.            } while (Repetido == "N" && Puntero2<PixelesdeLargo);
  53.            // Preparar Puntero para la próxima generación:
  54.            Puntero = MaxPosiciondePuntero;
  55.            // ¿El dibujo tiene píxeles pintados en toda columna y fila?
  56.            if (Repetido == "N") {
  57.               // trace ("   Mostrando dibujo.");
  58.               ContadorDeDibujos = ContadorDeDibujos+1;
  59.            } else {
  60.               // No, el dibujo es repetido, no mostrarlo y hacer otro:
  61.               // trace ("   Repetido, salteándolo.");
  62.               Variar();
  63.            }
  64.         } else {
  65.            // El pixel no puede cambiar de color, resetearlo:
  66.            ColorDePixel.setRGB(0xFFFFFF);
  67.            // trace ("Se reseteó el pixel "+PixelaModificar);
  68.            // Actualizar los valores de PintadosenC y PintadosenF:
  69.            // Averiguar la columna del pixel:
  70.            Columna = 1+(Puntero-1)%PixelesdeLargo;
  71.            // Esto se usa para evitar repeticiones de concatenaciones y simplificarlas:
  72.            ColumnaRelevante = "PintadosenC"+Columna;
  73.            // Disminuir contador de píxeles pintados en ella:
  74.            set (ColumnaRelevante, eval(ColumnaRelevante)-1);
  75.            // Averiguar la fila del pixel:
  76.            Fila = Math.ceil(Puntero/PixelesdeLargo);
  77.            // Esto se usa para evitar repeticiones de concatenaciones y simplificarlas:
  78.            FilaRelevante = "PintadosenF"+Fila;
  79.            // Disminuir contador de píxeles pintados en ella:
  80.            set (FilaRelevante, eval(FilaRelevante)-1);
  81.            // ¿Hay un pixel anterior?
  82.            if (Puntero>1) {
  83.               // Sí, apuntar a ese:
  84.               Puntero = Puntero-1;
  85.               // Continuar haciendo el dibujo:
  86.               // trace ("   Haciendo dibujo, apuntando al pixel anterior.");
  87.               // trace ("SumadePintados: "+SumadePintados);
  88.               // trace ("SumadePintadosNuevos: "+SumadePintadosNuevos);
  89.               Variar();
  90.            } else {
  91.               // No, aumentar tamaño de hoja y reiniciar.
  92.               trace (ContadorDeDibujos);
  93.               gotoAndPlay (2);
  94.            }
  95.         }
  96.      }
  97.   actions for fotograma 2
  98.      ContadorDeDibujos = 0;
  99.      PixelesdeLargo = PixelesdeLargo+1;
  100.      // Colocados:
  101.      Pixeles = 0;
  102.      DistanciaEntrePixeles = 384/PixelesdeLargo;
  103.      PosicionX = 64-DistanciaEntrePixeles;
  104.      EnlaFilaActual = 0;
  105.      PosicionY = 0;
  106.      MaxPosiciondePuntero = PixelesdeLargo*PixelesdeLargo;
  107.      // Aquí MinPixelInferior es 3:
  108.      // 12
  109.      // 34
  110.      MinPixelInferior = PixelesdeLargo*(PixelesdeLargo-1)+1;
  111.      // Agregar y distribuir píxeles en blanco:
  112.      do {
  113.         Pixeles = Pixeles+1;
  114.         if (EnlaFilaActual<PixelesdeLargo) {
  115.            EnlaFilaActual = EnlaFilaActual+1;
  116.            PosicionX = PosicionX+DistanciaEntrePixeles;
  117.         } else {
  118.            PosicionX = 64;
  119.            EnlaFilaActual = 1;
  120.            PosicionY = PosicionY+DistanciaEntrePixeles;
  121.         }
  122.         // trace("El pixel "+Pixeles+" se colocó en "+PosicionX+", "+PosicionY);
  123.         attachMovie("mPixel", "Pixel"+Pixeles, Pixeles);
  124.         setProperty ("Pixel"+Pixeles, _x, PosicionX);
  125.         setProperty ("Pixel"+Pixeles, _y, PosicionY);
  126.         setProperty ("Pixel"+Pixeles, _width, DistanciaEntrePixeles);
  127.         setProperty ("Pixel"+Pixeles, _height, DistanciaEntrePixeles);
  128.         ColorDePixel = new Color("Pixel"+Pixeles);
  129.         ColorDePixel.setRGB(0xFFFFFF);
  130.      } while (Pixeles<MaxPosiciondePuntero);
  131.      // Pintar una diagonal /:
  132.      Incremento = PixelesdeLargo-1;
  133.      Puntero = PixelesdeLargo-Incremento;
  134.      do {
  135.         Puntero = Puntero+Incremento;
  136.         Col = new Color("Pixel"+Puntero);
  137.         Col.setRGB(0);
  138.         // trace("Se pintó el pixel "+Puntero);
  139.      } while (Puntero<MinPixelInferior);
  140.      // Asignar que en cada columna y fila hay 1 pixel pintado:
  141.      Puntero = 0;
  142.      do {
  143.         Puntero = Puntero+1;
  144.         set ("PintadosenC"+Puntero, 1);
  145.         set ("PintadosenF"+Puntero, 1);
  146.      } while (Puntero<PixelesdeLargo);
  147.      // El puntero debe estar abajo a la derecha:
  148.      Puntero = MaxPosiciondePuntero;
  149.      // El 1er dibujo mostrado no será la diagonal sino...
  150.      // ella con el pixel mayor pintado, así que...
  151.      // los dibujos producible siempre son +1 de lo que se dice aquí.
  152.   actions for fotograma 3
  153.      stop ();
  154.   actions for Vacío
  155.      onClipEvent (enterFrame) {
  156.         _level0.Variar();
  157.      }

Cosas que quiero hacer luego:
- Simplificar la creación de Píxeles, si es posible, debo ver bien cómo lo hiciste.
- Evitar repeticiones por simetría horizontal.
- Intentar que el orden sea según la combinación más distinta.

La idea es que se muestren todos los dibujos posibles en que haya algún píxel pintado en cada columna y fila, pero son TANTOS, que es algo inútil de ver, no se produce mucho interesante...

Por eso luego...
- Hacer un generador random, de muchos dibujos con tamaño y colores a elección. Y programación genética.

La idea es hacer un generador de sprites.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Valor de los colores en flash
Diseño Gráfico
Salgaw 1 1,598 Último mensaje 23 Abril 2005, 01:22 am
por Morris
[COLORES] Como cambiar colores en c++
Programación C/C++
ianmorar03 1 3,137 Último mensaje 20 Abril 2016, 06:50 am
por engel lex
Cambiar colores en la terminal
Programación C/C++
nadales56 3 2,349 Último mensaje 18 Marzo 2019, 23:58 pm
por lfgmespino
Cambiar colores en batch.
Scripting
ZZZz1727z 5 10,379 Último mensaje 13 Noviembre 2020, 22:40 pm
por Mudereded401
Cambiar los colores de un control edit
Programación C/C++
alienxz77b 4 5,305 Último mensaje 18 Octubre 2021, 10:29 am
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines