Cristalab

Animaciones dinámicas con clase Tween de Actionscript 2

Por: penHolder + 23.11.2007

En un paseo por los foros me he dado cuenta que aun son muchos (incluyéndome hasta no hace mucho U_U) los que no conocen las ventajas del uso de la clase Tween; es por eso que me decidí a hacer este tip para aclarar como es su funcionamiento.

Empecemos miau
Esta clase sirva para hacer transiciones de los valores de las distintas propiedades de un MovieClip: _x, _y, _xscale, _yscale, _alpha...

En primer lugar debemos entender la clase Tween está en el paquete de mx.transitions, por lo que lo más habitual es que tengamos que importarla antes de usarla, como? pues asi:

Código :

import mx.transitions.Tween;


Ahora bien, ¿como la utilizamos?
Pues así:

Código :

var miTween:Tween = new Tween(obj, prop, func, begin, finish, duration, useSeconds)

a primera vista lo que vemos es una variable de tipo Tween, donde:


ejemplo:

Código :

import mx.transitions.Tween;
var miTween:Tween = new Tween(miClip, "_x", null, 5, 300, 2, true);


este codigo lo que hace es mover un MovieClip instanciado como "miClip" desde la posición "5" hasta "300" en el eje de x en 2 segundos

Ahora bien esto no termina aqui, como habrán notado en el ejemplo anterior pasamos como null al valor de la función, ya que estas también deben importarse, y se hace de la siguiente manera

Código :

import mx.transitions.easing.*;

esta funcion dispone de 6 métodos a saber:


Como se ve en los ejemplos anteriores después de cada método hay otra propiedad, en este caso "easeOut", estos seis métodos tienen a su vez cuatro clases de suavizado:


Espero sirva Guiño

Etiquetas actionscript

Comentarios | Enviar un comentario
Muy bien penHolder, es una ampliación a lo que JaLeRu posteo en otro tip sobre el mismo tema.
Por: Carloz.Yanez

Carloz.Yanez :

Muy bien penHolder, es una ampliación a lo que JaLeRu posteo en otro tip sobre el mismo tema.


el de JaLeRu es AS3, si bien la sintaxis no es muy distinta... digamos q son dos caras de una misma moneda Lengua
Por: penHolder
Buen Tip, están buenos los ejemplos para ver las diferentes aceleraciones de las interpolaciones.

PD: Aquí también hay otro tip de la clase tween en AS2, aunque muestra un ejemplo más concreto.
Por: Zguillez
muy bueno, muy claro!!
Por: Sabalardo_blog
Me gustó la claridad del tip.
Muy bueno Thumbs up
Por: Nito
Buen tip Guiño
A los que empiecen a usar la clase Tween les comento unos puntos:
La clase Tween también tiene Eventos, y el que más se usa es el onMotionFinished que nos servirá de callback. Me explico, por ejm: cuando termine el movimiento con el efecto dado, que la esfera desaparezca o que aparezca un texto, en fin lo que queramos.

Ademas el óptimo uso de Tween, cuando comiencen a usarlo mucho), es recomendable también conocer la clase Delegate para manejar correctamente los ámbitos de las funciones Guiño
Por: Otaku RzO
Perdonen si me leo muy egolatra pero en donde se encuentra lo dinamico?, por que a mi parecer solamente estas enseñando el modo de uso.
En otro punto de vista el tutorial muestra todo lo que esta en la ayuda de flash, PERO la DIDACTICA esta EXELENTE, me GUSTO mucho que EJEMPLIFICARAS las funciones o metodos de animacion displonibles. Muy buen tutorial.
Por: quien yo?_blog
@Si!_tu_blog

Se refiere a que el movimiento es dinámico con esta clase. No ha hacer algo dinámico con él aún.

+++

Muchas gracias, están excelente los ejemplos. Para ser francos no sabía que existiera esta clase... todo ese tipo de funciones de movimiento dinámico los hacia yo mismo creando mis propias clases y creando prototipos de función para después aplicarlos a los movieclips.

Código :


motion("movie_clip00, x, y);


Donde "movie_clip00" era el target, 'x' y 'y' era el destino de mi target.

Código :

_global.ease = 0.3;
//
function motion(clip, nx, ny) {
   clip.onEnterFrame = function() {
      clip._x = clip._x+(nx-clip._x)*_global.ease;
      clip._y = clip._y+(ny-clip._y)*_global.ease;
      if (nx == Math.round(clip._x) && ny == Math.round(clip._y)) {
         delete clip.onEnterFrame
      }
   };
}
//



Pero bueno... eso fué en el pasado Sonrisa
Por: glsmaster
Muy buen tip, y además bastante claro. Sólo tengo una consulta, basado en los ejemplos podemos hacer animaciones lineales de X a X o de Y a Y. Cual sería la variación para hacer una animación diagonal?

Gracias
Por: vtisnado_blog

vtisnado_blog :

Muy buen tip, y además bastante claro. Sólo tengo una consulta, basado en los ejemplos podemos hacer animaciones lineales de X a X o de Y a Y. Cual sería la variación para hacer una animación diagonal?

Gracias


todos los ejemplos son de animaciones lineales en _x
Por: penHolder
Creo que eso ya lo sabe, lo que el pregunta, a lo que entiendo, es como hacer una animacion que en lugar de que sea solo lineal en orizontal o en vertical, lo haga en diagonal, creo.
En cuanto al tip, que yo mas bien lo llamaria un muy buen acercamiento de nuevos conocimientos, pues gracias, penHolder, creo que ya estoy pensando en que poner el uso de esa clase, thank's.
Por: Señor Oz_blog

vtisnado_blog :

Muy buen tip, y además bastante claro. Sólo tengo una consulta, basado en los ejemplos podemos hacer animaciones lineales de X a X o de Y a Y. Cual sería la variación para hacer una animación diagonal?

Gracias

Apenado no habia leido bien...

solo debes conbinar, osea un transicion en x y otra en y

Código :

import mx.transitions.Tween;
import mx.transitions.easing.*;

var miTweenX:Tween = new Tween(miClip, "_x", Strong.easeInOut, 5, 300, 2, true);
var miTweenY:Tween = new Tween(miClip, "_y", Strong.easeInOut, 5, 150, 2, true);



Guiño miau
Por: penHolder
Esta muy bien explicado la clase tween de Actionscript 2 para animaciones dinámicas
Por: Adriana_blog
hola penholder: espectacular el tutorial... la verdad recien me inicio en codigo action script y buscaba cosas sencillas como estas que me mostraran resultados sin tener que entender de otras funciones o codigos mas complejos... aca agradecido
saludos me voy a estar pasando mas seguido por aca
Por: alejandro_blog
Muy buen tuto... la verdad lo estoy aplicando en unos bannercitos que los estoy haciendo.. pero tengo una pregunta ... como puedo hacer a traves de codigo varias animaciones.. es decir una despues de otra ... lo estoy intentando y siempre hace la ultima animación ... ?? que será...
Por: chamaco08_blog

chamaco08_blog :

Muy buen tuto... la verdad lo estoy aplicando en unos bannercitos que los estoy haciendo.. pero tengo una pregunta ... como puedo hacer a traves de codigo varias animaciones.. es decir una despues de otra ... lo estoy intentando y siempre hace la ultima animación ... ?? que será...


te invito a pasar por el foro de ActionScript asi tratamos tu caso puntual, y no enssuciamos el tip Guiño
Por: penHolder
En este momento lo aplico...sobradoooo!!
Por: etzekiel_blog
Lo que yo siempre me he preguntado con respecto a los movimientos de objetos en flash (incuso algo tan simple y pequeño como este circulo) es por que se ve tan poco fluido? incluso generando algunos frames en donde aparece como una especie de linea sobre el objeto... lo cierto es que si fuese un objeto grande, y con un mapa de bits adentro... bueno... podria entender la excusa de que como flash no tiene aceleracion por hardware, el micro se satura y no logra generar los frames necesarios... pero aun en estos casos... no se ve fluido. lo mismo con la interpolacion de mapas de bits... por que es tan mala la interpolacion en flash? uno achica una foto y no queda para nada bien, incluso dictaminando que es un png (si fuese el caso) o modificando la calidad de la imagen... y ni hablar si justamente lo que deseamos es hacer una animacion en donde se juega con el tamaño de un mapa de bits...
Por: guille_blog
justo termino de escribir el anterior post (hace unos dias) y revisando el ActionScript 2.0 Language Reference me encuentro con que ahora, con el player 9 se puede usar MovieClip.forceSmoothing para evitar los problemas que mencionaba aqui arriba.... ahora todo se ve mucho mejor interpolado.. antes a esto, habia forma de lidiar con estos problemas??
Por: guille_blog
Que buen tip.

Gracias por compartir el conocimiento sin cobrr canones.
Por: salva65f_blog
Hola, gracias por el tip, está genial.

Tengo una duda que espero q puedan resolverme. La cuestión es que tengo un menú que cargo mediante xml. Necesito que al pulsar uno de los enlaces, todo el menú se desplace hacia la derecha. Consigo hacerlo mediante el tip, y funciona, pero cómo hacer que al volver al pulsar el enlace no ejecute de nuevo el movimiento? Necesito que el menú quede quieto hasta que pulse un botón de volver, y entonces volvería al punto 0,0 original.

El menú que estoy utilizando es este: http://flashden.net/item/mysectionedmenu-xml/5201?ref=encryptme

En el menú creo esta función:

proyectos = function(){
var miTween:Tween = new new Tween(menu, "_x", Regular.easeOut, 30, 100, 1, true);
}

y la llamo desde el xml

<sub title="Clients" gotSub="true">
<sub title="www.ejemplo.es" url="proyectos" target="" type="function"></sub>

gracias
Por: trevize
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.