Programa:
https://dl.dropboxusercontent.com/u/169164922/02o.swf
Frame 1:
Código:
Nota: Sí, aprendí un poco a usar functions :PPos = 5; // Posiciones en la dimensión. PosW9 = 1; // Marca si todas las cruces (representan las posiciones) tienen ancho 9. 1 significa sí, 0 no. function IAPosReset () { // Hace que IA (el Tachikoma) vuelva a la posición inicial, fuera de D. IA._x = 200; IA._y = 188.7; } function IAScaReset () { // Hace que el tamaño de IA sea el estándar. IA._xscale = 100; IA._yscale = 100; }
Frame 2:
Código:
...// Actualización de los valores. // Coloca posiciones. Margen = 360/(Pos*2)+20; PosDis = 360/Pos; // Distancia entre las posiciones. N = 0; do { N = N+1; Mv.attachMovie("Pos", "Pos"+N, N); setProperty (eval("Mv.Pos"+N), _x, Margen+PosDis*(N-1)); if (PosDis<18) { // Las cruces deben reducirse; se reducen. setProperty (eval("Mv.Pos"+N), _width, PosDis/2); setProperty (eval("Mv.Pos"+N), _height, PosDis/2); } else if (PosW9 == 0) { // Deben tener tamaño normal y no lo tienen; a tenerlo. setProperty (eval("Mv.Pos"+N), _width, 9); setProperty (eval("Mv.Pos"+N), _height, 9); } } while (N<Pos); if (PosDis<18) { if (PosW9 == 1) { // Las cruces tienen tamaño reducido y no está indicado; // se indica. PosW9 = 0; } if (PosDis*2<38.8) { // IA debe reducirse; se reduce. IA._height = IA._height*PosDis/IA._width; IA._width = PosDis; } else if (IA._xscale<100) { // Debe tener tamaño normal y no lo tiene; a tenerlo. IAScaReset (); } } else { if (PosW9 == 0) { // Las cruces tienen tamaño normal y no está indicado; // se indica. PosW9 = 1; } if (IA._xscale<100) { // IA debe tener tamaño normal y no lo tiene; a tenerlo. IAScaReset (); } }
El frame 2 se aplica cada vez que hay un cambio en Pos, el número de posiciones. Lo que intenté es que no se cambien tamaños cuando no es necesario. Para eso cree la variable PosW9 y muchos ifs que para mí son raros por ahí. Esa es la cuestión. ¿Se puede hacer de forma más simple?
Antes lo tenía así:
Frame 1:
Pos = 5;
Frame 2:
Código:
O sea no recuerdo ya cuántas cosas un poco inadecuadas había en eso, pero una de ellas -y la crucial en esta cuestión- es el 1er else. Si las posiciones tenían el ancho normal (9), se restablecían usando el mismo valor xP// Actualización de los valores. // Coloca posiciones. Margen = 360/(Pos*2)+20; PosDis = 360/Pos; N = 0; do { N = N+1; Mv.attachMovie("Pos", "Pos"+N, N); setProperty (eval("Mv.Pos"+N), _x, Margen+PosDis*(N-1)); if (PosDis<18) { setProperty (eval("Mv.Pos"+N), _width, PosDis/2); setProperty (eval("Mv.Pos"+N), _height, PosDis/2); } else { setProperty (eval("Mv.Pos"+N), _width, 9); setProperty (eval("Mv.Pos"+N), _height, 9); } if (PosDis*2<38.8) { IA._height = IA._height*PosDis/IA._width; IA._width = PosDis; } else { IA._xscale = 100; IA._yscale = 100; } } while (N<Pos);
Era un sin sentido, intenté evitarlo y lo logré creo, pero quisiera saber si se puede de una forma más simple.
Ya que estamos agradezco opiniones respecto a otras cosas del código. Por ejemplo:
Código:
Aparece 2 veces, casi como si estuviese dentro de un if y también dentro de un else de ese if. Casi. Yo lo puse así porque intento que el programa no llegue a ifs en casos en que se deduce que son false. Pero bueno, me pregunto si puede hacerse de esa forma y a su vez evitar que aparezca en 2 sitios distintos pero tan cercanos.if (IA._xscale<100) { // IA debe tener tamaño normal y no lo tiene; a tenerlo. IAScaReset (); }
Gracias.