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