Comunidad de diseño web y desarrollo en internet online

Ayuda para cambiar propiedades de MC via Action Script

Citar            
MensajeEscrito el 26 Oct 2004 05:59 am
Hola, hace unos dias puse un post sobre el tema, pero al no obtener respuestas me di cuenta que redacte la pregunta de una forma muy complicada.

Mi pregunta seria ¿Como mediante action script puedo hacer que un Movie Clip se despliege a una escala de 0 en x o y, y gradualmente se agrande hasta su valor maximo en x o en y? Gracias de antemano.

Por atomskreymx

39 de clabLevel



 

unknown
Citar            
MensajeEscrito el 26 Oct 2004 08:38 am
Bueno, explicaré un poco este código:

Código :

attachMovie("circulo", "circulo_mc", _root.getNextHighestDepth());

ancho = circulo_mc._width;
alto = circulo_mc._height;

circulo_mc._width = 0;
circulo_mc._height = 0;

agrandarInt = setInterval(agrandar, 50);

function agrandar(){
   circulo_mc._width += (ancho - circulo_mc._width) / 5;
   circulo_mc._height += (alto - circulo_mc._height) / 5;
   
   if (circulo_mc._width > (ancho-1)){
      clearInterval(agrandarInt);
   }
}


Primero con attachMovie cargamos en el escenario nuestro clip de película, que en este caso en la biblioteca se llama "circulo". Para poner esos nombres tienes que hacer en la biblioteca botón derecho --> linkage... --> exportar para actionscript.

Luego con las variables ancho y alto recogemos su tamaño original, ponemos el tamaño del circulo a 0 y entonces creamos un intervalo para agrandar el circulo.

Cuando el circulo ha llegado a su tamaño original, borramos el intervalo con clearInterval para que no consuma CPU.

Y ya está ;)

Un saludo!! ^^

Por Elecash

Claber

8126 de clabLevel

37 tutoriales
19 articulos
13 ejemplos

  Bastard Operators From Hell Desarrollador de GAIA Premio_Secretos Héroes

BarnaCity

unknown
Citar            
MensajeEscrito el 26 Oct 2004 11:16 am
Gracias Elechash. Probe el script y funciono de maravilla, sin embargo he tenido problemas para agregarlo al proyecto que estoy desarrollando.

De hecho yo mismo diseñe una funcion que hace lo que requiero para el movie clip; pero el movimiento es muy rapido y brusco y no se ve igual que la funcion que tu usas.

Lo que hice fue:

agrandarInt = setInterval(agrandar, 100);
mcWindow._yscale = 1;
agrandarInt = setInterval(agrandar, 100);
mcWindow._yscale = 1;
function agrandar(){
for (es=1; es <= 100; es++){
mcWindow._yscale = es;
}
}

La funcion efectivamente da un efecto de alargamiento de arriba a abajo; sin embargo es un efecto brusco. Por lo que entiendo el metodo mas similar a "delay" que tenia flash ya esta deprecated ahora, asi que sigo perdido.

En realidad no entiendo cual es la logica detras de instrucciones como

circulo_mc._height += (alto - circulo_mc._height) / 5;

y aunque son las que dan mas fluidez, hasta ahora unicamente las copio como loro (o sea que las repito, pero no las entiendo).


¿hay alguna forma de animar con bucles y que el movimiento sea suave? ¿o como podria corregir mi funcion? De antemano gracias, y perdon por abusar de tu paciencia ^_^

Por atomskreymx

39 de clabLevel



 

unknown
Citar            
MensajeEscrito el 26 Oct 2004 11:58 am
No puedes usar bucles para animar (REPITO, NO PUEDES :bate: ).

Esto se debe a la forma en que tiene Flash para interpretar y ejecutar el código. Haré una pequeña explicación teniendo en cuenta este código:

Código :

for (es=1; es <= 100; es++){
   mcWindow._yscale = es;
}


Flash ejecuta los códigos de ActionScript a cada paso del fotograma, es decir, que ese for te lo está ejecutando todo entero, del 1 al 100 en un fotograma, así que si tienes puesto 24 fps en tu película, obviamente no vas a ver practicamente nada.

Para ello, se usan estas bonitas fórmulas matemáticas que nadie entiende:

Código :

valorActual += (valorFinal - valorActual) / Friccion;


Hay que tener en cuenta que el operador "+=" es una forma de acortar la fórmula, ya que esto daría el mismo resultado:

Código :

valorActual = valorActual + ((valorFinal - valorActual) / Friccion);


Pongamos que tu quieres mover algo que vaya de una posición inicial x igual a 0, a una posición final x igual a 100. Bien, pues aplicariamos la fórmula de la siguiente manera:

Código :

miClip._x = 0;
miClip.onEnterFrame = function(){
   miClip._x += (100 - miClip._x) / 5;
}


Y ahora, sólamente tenemos que coger la calculadora y comenzar a hacer sumas, restas y divisiones:

Código :

0 = 0 + ((100-0)/5); --> Resultado: 20
20 = 20 + ((100-20)/5); --> Resultado: 36
36 = 36 + ((100-36)/5); --> Resultado: 48.8
48.8 = 48.8 + ((100-48.8)/5); --> Resultado: 59.04
59.04 = 59.04 + ((100-59.04)/5); --> Resultado: 67.232
etc...


Como puedes ver, esta fórmula se ejecutaría a cada fotograma haciendo que el primer cálculo moviese 20 pixeles, el segundo 16, el tercero 12, el cuarto 11.04, etc... así sucesivamente hasta que llega a 100. Por eso el movimiento es con ese efecto de Easing que se dice.

En este ejemplo he usado _root.onEnterFrame para que entiendas que esto se ejecuta a cada fotograma, pero el código que te pase antes lo he hecho con setInterval, que funciona en vez de a pasos de fotograma con el reloj de la CPU, pero para el caso es lo mismo.

Bueno, espero que ahora lo hayas entendido un poco mejor, jeje.

Un saludo!! ^^

Por Elecash

Claber

8126 de clabLevel

37 tutoriales
19 articulos
13 ejemplos

  Bastard Operators From Hell Desarrollador de GAIA Premio_Secretos Héroes

BarnaCity

unknown
Citar            
MensajeEscrito el 26 Oct 2004 04:44 pm
Gracias Elecash, ya entendiendo el significado de las variables pude hacer una funcion que hace lo que necesitaba. Al final quedo así:

agrandarInt = setInterval(agrandar, 50);
es = 1;
mcWindow._yscale = es;
esf = 100;
function agrandar(){
es += (esf - es) / 3;
mcWindow._yscale = es;
if (mcWindow._yscale > (esf-1)){
clearInterval(agrandarInt);
}
}

Por atomskreymx

39 de clabLevel



 

unknown
Citar            
MensajeEscrito el 26 Oct 2004 07:24 pm
c00l ^^

Por Elecash

Claber

8126 de clabLevel

37 tutoriales
19 articulos
13 ejemplos

  Bastard Operators From Hell Desarrollador de GAIA Premio_Secretos Héroes

BarnaCity

unknown

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.