Foros del Web » Creando para Internet » Flash y Actionscript »

[SOLUCIONADO] ¿Puede hacerse de forma más simple?

Estas en el tema de ¿Puede hacerse de forma más simple? en el foro de Flash y Actionscript en Foros del Web. Perdón por estos títulos poco explicativos, pero la cuestión me es difícil de resumir. Programa: https://dl.dropboxusercontent.com/u/169164922/02o.swf Frame 1: Código: Pos = 5; // Posiciones en ...
  #1 (permalink)  
Antiguo 17/06/2014, 01:47
Tachikomaia
Invitado
 
Mensajes: n/a
Puntos:
¿Puede hacerse de forma más simple?

Perdón por estos títulos poco explicativos, pero la cuestión me es difícil de resumir.

Programa:
https://dl.dropboxusercontent.com/u/169164922/02o.swf

Frame 1:
Código:
Pos = 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;
}
Nota: Sí, aprendí un poco a usar functions :P

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:
// 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);
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
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:
if (IA._xscale<100) {
	// IA debe tener tamaño normal y no lo tiene; a tenerlo.
	IAScaReset ();
}
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.

Gracias.
  #2 (permalink)  
Antiguo 21/06/2014, 00:13
Tachikomaia
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ¿Puede hacerse de forma más simple?

La respuesta era obvia, no sé por qué no me di cuenta.

Si hay que evitar cambiarle tamaño a una cosa cuando ya tiene el tamaño que se busca ¿cómo puede hacerse? ¿o sea cómo se puede saber cuando hay que evitar cambiarle el temaño y cuando no? Capitan obvious says: Analizando el tamaño actual. Si el tamaño es el deseado, se deja como está, sino se cambia.

En la derecha está la versión simplificada.
https://dl.dropboxusercontent.com/u/169164922/02r.doc

Etiquetas: forma, programación-general
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:10.