No logro que el programa cuente bien los nuevos píxeles pintados.

(1/1)

Tachikomaia:
Intento hacer un generador de dibujos cada vez de más píxeles (2x2, 3x3, etc), por ahora solo negros con fondo blanco. Aquí se ve algo parecido:
https://www.youtube.com/watch?v=0x5fEw8LGP4

Quiero evitar que se generen dibujos repetidos. Para eso exijo a los dibujos 2 cosas (no es suficiente pero 1ero debo resolver esto):
1- La cantidad de píxeles pintados debe ser >= Píxeles que entran en el largo de la hoja. Si en la hoja puede haber 2x2, debe haber mínimo 2.
2- La cantidad de nuevos pixeles pintados debe ser > 0. Cuando la hoja es de 2x2, los nuevos (N) son:
ON
NN
Cuando es de 3x3 son:
OON
OON
NNN
Es decir, los del extremo derecho y los inferiores.

Intento que los cuente para así determinar si debe mostrar el dibujo o salteárselo, pero llega un punto en que la cifra no disminuye o aumenta cuando no debe, no sé, estoy viendo cual puede ser el problema.
Código
  actions for fotograma 1
     PixelesdeLargo = 1;
     // En F3 se repite:
     function Variar () {
        PixelaModificar = "ColordePixel"+Puntero;
        ColordePixelaModificar = eval(PixelaModificar);
        // ¿El pixel puede cambiar de color?
        if (ColordePixelaModificar<1) {
           // Sí, hacer los cambios:
           set (PixelaModificar, ColordePixelaModificar+1);
           Col = new Color("Pixel"+Puntero);
           Col.setRGB(parseInt(0, 16));
           trace ("Se pintó el pixel "+PixelaModificar);
           // Para juzgar: ¿El dibujo es repetido?
           SumadePintados = SumadePintados+1;
           // ¿El píxel está en el extremo derecho o abajo, donde no había en una hoja más chica?
           if (Puntero/PixelesdeLargo == Math.floor(Puntero/PixelesdeLargo) or Puntero>MinPixelInferior) {
              // Sí, actualizar SumadePintadosNuevos:
              SumadePintadosNuevos = SumadePintadosNuevos+1;
           }
           trace ("SumadePintadosNuevos: "+SumadePintadosNuevos);
           // ¿El dibujo tiene píxeles donde no había en una hoja más chica...
           // y son al menos (PixelesdeLargo) píxeles?
           if (SumadePintadosNuevos>0 && SumadePintados>=MinSumadePintados) {
              // Sí, hacer dibujo y dar tiempo para verlo:
              Puntero = MaxPosiciondePuntero;
              trace ("\tMostrando dibujo.");
              // trace ("SumadePintados: "+SumadePintados);
              trace ("SumadePintadosNuevos: "+SumadePintadosNuevos);
              play ();
           } else {
              // No, el dibujo es repetido, no mostrarlo y hacer otro:
              Puntero = MaxPosiciondePuntero;
              trace ("\tRepetido, salteándolo.");
              // trace ("SumadePintados: "+SumadePintados);
              trace ("SumadePintadosNuevos: "+SumadePintadosNuevos);
              Variar();
           }
        } else {
           // El pixel no puede cambiar de color, resetearlo:
           set (PixelaModificar, 0);
           Col = new Color("Pixel"+Puntero);
           Col.setRGB(parseInt("FFFFFF", 16));
           trace ("Se reseteó el pixel "+PixelaModificar);
           SumadePintados = SumadePintados-1;
           // ¿El píxel está en el extremo derecho o abajo, donde no había en una hoja más chica?
           if (Puntero/MaxPosiciondePuntero == Math.floor(Puntero/MaxPosiciondePuntero) or Puntero>=MinPixelInferior) {
              // Sí, actualizar SumadePintadosNuevos:
              SumadePintadosNuevos = SumadePintadosNuevos-1;
           }
           trace ("SumadePintadosNuevos: "+SumadePintadosNuevos);
           // ¿Hay un pixel anterior?
           if (Puntero>1) {
              // Sí, apuntar a ese:
              Puntero = Puntero-1;
              // Continuar haciendo el dibujo:
              trace ("\tHaciendo dibujo, apuntando al pixel anterior.");
              // trace ("SumadePintados: "+SumadePintados);
              trace ("SumadePintadosNuevos: "+SumadePintadosNuevos);
              Variar();
           } else {
              // No, aumentar tamaño de hoja y reiniciar.
              gotoAndPlay (2);
           }
        }
     }
  actions for fotograma 2
     PixelesdeLargo = PixelesdeLargo+1;
     // Colocados:
     Pixeles = 0;
     DistanciaEntrePixeles = 384/PixelesdeLargo;
     PosicionX = 64-DistanciaEntrePixeles;
     EnlaFilaActual = 0;
     PosicionY = 0;
     MaxPosiciondePuntero = PixelesdeLargo*PixelesdeLargo;
     Puntero = MaxPosiciondePuntero;
     // Píxeles pintados:
     SumadePintados = 0;
     // Esta variable parece eliminable pero antes era-1,
     // y podría ser que deba aumentar en ciertos casos:
     MinSumadePintados = PixelesdeLargo;
     MinPixelInferior = PixelesdeLargo*(PixelesdeLargo-1);
     // Píxeles pintados que no estaban en hojas de menos píxeles:
     SumadePintadosNuevos = 0;
     // Agregar píxeles en blanco:
     do {
        Pixeles = Pixeles+1;
        if (EnlaFilaActual<PixelesdeLargo) {
           EnlaFilaActual = EnlaFilaActual+1;
           PosicionX = PosicionX+DistanciaEntrePixeles;
        } else {
           PosicionX = 64;
           EnlaFilaActual = 1;
           PosicionY = PosicionY+DistanciaEntrePixeles;
        }
        trace ("El pixel "+Pixeles+" se colocó en "+PosicionX+", "+PosicionY);
        attachMovie("mPixel", "Pixel"+Pixeles, Pixeles);
        setProperty ("Pixel"+Pixeles, _x, PosicionX);
        setProperty ("Pixel"+Pixeles, _y, PosicionY);
        setProperty ("Pixel"+Pixeles, _width, DistanciaEntrePixeles);
        setProperty ("Pixel"+Pixeles, _height, DistanciaEntrePixeles);
     } while (Pixeles<MaxPosiciondePuntero);
     stop ();
  actions for fotograma 3
     stop ();
  actions for Vacío
     onClipEvent (enterFrame) {
        _level0.Variar();
     }
  actions for fotograma 4
     stop ();
  actions for fotograma 5
     gotoAndPlay (3);
 

¿Cómo lo soluciono?

Tachikomaia:
Probablemente hallé el problema.

Cuando se insertaba un pixel se hacía:
Código:

if (Puntero/PixelesdeLargo == Math.floor(Puntero/PixelesdeLargo) or Puntero>MinPixelInferior) {
// Sí, actualizar SumadePintadosNuevos:
SumadePintadosNuevos = SumadePintadosNuevos+1;
}


Y cuando se lo reseteaba:
Código:

if (Puntero/MaxPosiciondePuntero == Math.floor(Puntero/MaxPosiciondePuntero) or Puntero>=MinPixelInferior) {
// Sí, actualizar SumadePintadosNuevos:
SumadePintadosNuevos = SumadePintadosNuevos-1;
}

No sé por qué estaba tan distinto >___<

Navegación

[0] Índice de Mensajes