Comunidad de diseño web y desarrollo en internet online

Forzar reproducción bucle desde AS3

Citar            
MensajeEscrito el 12 May 2011 11:40 am
Hola a todos.

No suelo desarrollas en Flash, pero de vez en cuando tengo que hacer alguna cosilla y claro, me asaltan dudas como la que expongo, seguramente será algo nimio, pero es que ya llevo un par de días buscando soluciones y no llego a ningún sitio.

Estoy creando un banner para una web con animación de bitmaps mediante tween y algunas funciones.

El caso es que lo he realizado todo desde AS en el primer fotograma, y cuando se ejecuta la última función del código la animación se detiene, y lo que necesito es q vuelva a empezar desde el principio.

Como imagino q debe ser algo sencillo no creo necesario pastear código (además me da algo de vergüenza porque estoy seguro de que no es nada "elegante"... :-P). En cualquier caso si fuera necesario no tengo inconveniente en ponerlo en el hilo.

Gracias de antemano por vuestra ayuda.


Un saludo.

Por jclaguna

2 de clabLevel



 

España

chrome
Citar            
MensajeEscrito el 12 May 2011 12:39 pm
Hola jclaguna, bienvenido a cristalab.
En ingles hay un dicho que va mas o menos asi 'hay muchas formas de quitarle la piel a un gato', que significa que existen muchas formas de hacer alguna cosa. Mi punto es, sin el codigo, no tenemos ni idea del problema en si y mucho menos de la solucion...

Por Acreonte

Claber

1543 de clabLevel

5 tutoriales
6 articulos

Genero:Masculino  

Digital Scientist

firefox
Citar            
MensajeEscrito el 12 May 2011 04:45 pm
Hola Acreonte, gracias por tu rápida respuesta.

Tienes razón con lo del código, lo pasteo a continuación:

Código ActionScript :

//Importamos clases para las transiciones
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
import com.greensock.*;
import com.greensock.easing.*;

/////////////////////    TONICAS    ////////////////////////

//Primero los alfas de los mc, utilizo la clase Tween y el engine de greenshok para poder
//aplicar dos tipos de animaciones (alfa y movimientos) con diferentes temporizaciones

    var alfa1:Tween = new Tween(tonica_mc, "alpha", Regular.easeIn, 0, 1, 5, true);
    var alfa2:Tween = new Tween(tonica2_mc, "alpha", Regular.easeOut, 0, 0.6, 8, true);
    var alfa3:Tween = new Tween(tonica3_mc, "alpha", Regular.easeOut, 0, 0.4, 10, true);

 //Ahora los movimientos y los escalados en su caso   

    TweenLite.to(tonica3_mc, 8, {x:240, y:115, ease:Regular.easeOut});

//Desde el final de esta transición lanzo una función para dibujar un resplandor en el mc
    TweenLite.to(tonica_mc, 8, {x:470, y:133, scaleX:0.4, scaleY:0.4, ease:Regular.easeOut, onComplete:shineTonica});

    TweenLite.from(tonica2_mc, 12, {x:-30, y:-150, ease:Regular.easeOut});

//Aqui la función del resplandor
    function shineTonica():void{
        TweenMax.to(tonica_mc, 3, {glowFilter:{color:0x33ccff, alpha:1, blurX:90, strength:1, quality:3}, ease:Bounce.easeOut, onComplete:finTonica});
    };
//Cuando acabo con el resplandor lanzo la función que baja los alfas y hace desaparecer los mcs (a continuación)

    function finTonica():void{
//Antes de bajar los alfas genero un timer para mantener el mc en pantalla 'x' tiempo
        function alfaTonicaCero():void{
            TweenMax.to(tonica_mc, 2, {autoAlpha:0});
            TweenMax.to(tonica2_mc, 2, {autoAlpha:0});
            TweenMax.to(tonica3_mc, 2, {autoAlpha:0, onComplete:goRones2123});
            };

//El timer que lanza la función anterior
        var interTonica:Timer = new Timer(2000, 1);
        interTonica.addEventListener(TimerEvent.TIMER, alfaTonicaCero);
        interTonica.start();
    };
//Fin de la animación de los primeros mc

//El resto del código es una copia de este primer módulo, sólo cambian los objetos y los parámetros de las funciones y los tween...

/////////////////////    RONES 21-23    ////////////////////////

function goRones2123():void{
    var alfaRones1:Tween = new Tween(rones23_mc, "alpha", Regular.easeIn, 0, 1, 4, true);
    var alfaRones2:Tween = new Tween(rones232_mc, "alpha", Regular.easeIn, 0, 0.3, 8, true);
    
    TweenLite.to(rones23_mc, 6, {x:440, y:133, scaleX:0.6, scaleY:0.6, ease:Regular.easeOut, onComplete:shineRones});
    TweenLite.from(rones232_mc, 9, {x:-30, y:-150, ease:Regular.easeOut, onComplete:finRones});

function shineRones():void{
    TweenMax.to(rones23_mc, 3, {glowFilter:{color:0xffff00, alpha:1, blurX:90, blurY:40, strength:1, quality:3}, ease:Bounce.easeOut});
};

    function finRones():void{
        function alfaRonesaCero():void{
            TweenMax.to(rones23_mc, 2, {autoAlpha:0, ease:Regular.easeIn});
            TweenMax.to(rones232_mc, 2, {autoAlpha:0, ease:Regular.easeIn, onComplete:goGinTonic});
        };
        var interRones:Timer = new Timer(2500, 1);
        interRones.addEventListener(TimerEvent.TIMER, alfaRonesaCero);
        interRones.start();
    };
};

/////////////////////    GIN TONIC    ////////////////////////

function goGinTonic():void{
    var alfaGinTonic:Tween = new Tween(GinTonic_mc, "alpha", Regular.easeIn, 0, 1, 4, true);
    var alfaGinTonic2:Tween = new Tween(GinTonic2_mc, "alpha", Regular.easeIn, 0, 0.35, 8, true);
    
    TweenMax.to(GinTonic_mc, 6, {x:150, y:135, scaleX:0.36, scaleY:0.36, ease:Regular.easeOut, onComplete:shineGinTonic});
    TweenMax.to(GinTonic2_mc, 10, {scaleX:0.90, scaleY:0.90, ease:Regular.easeOut, onComplete:finGinTonic});
    
function shineGinTonic():void{
    TweenMax.to(GinTonic_mc, 3, {glowFilter:{color:0x33ccff, alpha:1, blurX:60, blurY:40, strength:1, quality:3}, ease:Bounce.easeOut});
    TweenMax.to(GinTonic_mc, 3, {glowFilter:{color:0x33ccff, alpha:1, blurX:60, blurY:40, strength:1, quality:3}, ease:Bounce.easeOut});
};
    
    function finGinTonic():void{
        function alfaGinTonicaCero():void{
            TweenMax.to(GinTonic_mc, 3, {autoAlpha:0, ease:Regular.easeIn});
            TweenMax.to(GinTonic2_mc, 3, {autoAlpha:0, ease:Regular.easeIn, onComplete:goNikitas});
        };
        var interGinTonic:Timer = new Timer(2500, 1);
        interGinTonic.addEventListener(TimerEvent.TIMER, alfaGinTonicaCero);
        interGinTonic.start();
    };
};


/////////////////////    NIKITA    ////////////////////////

function goNikitas():void{
    TweenMax.to(nikitas_mc, 5, {y:130, scaleX:0.57, scaleY:0.57, alpha:1, ease:Regular.easeOut, onComplete:ShineNikita});
    function ShineNikita():void{
        TweenMax.to(nikitas_mc, 3, {glowFilter:{color:0xff0000, alpha:1, blurX:64, strength:1, quality:3}, ease:Bounce.easeOut, onComplete:finNikita});
    };
};
    
    function finNikita():void{
        function alfaNikitacero():void{
            TweenMax.to(nikitas_mc, 5, {alpha:0, ease:Regular.easeOut});
        };
    var interNikita:Timer = new Timer(2000, 1);
    interNikita.addEventListener(TimerEvent.TIMER, alfaNikitacero);
    interNikita.start();
};



Muchas gracias por vuestra ayuda y tiempo.


Un saludo.

Por jclaguna

2 de clabLevel



 

España

msie8
Citar            
MensajeEscrito el 12 May 2011 04:51 pm
Por si sirve de algo para describir con más detalle como he hecho la animación:


Toda el FLA está en un sólo fotograma.

El código está en el fotograma de una capa llamada AS.

Los mcs están todos en el escenario distribuidos en diferentes capas, todos con el alfa a 0.

No se me ocurre que más poner, si necesitáis algo más no dudéis en postearlo.



De nuevo gracias.

Por jclaguna

2 de clabLevel



 

España

msie8
Citar            
MensajeEscrito el 12 May 2011 10:38 pm
Un poco dificil de entender, pero la idea es asi:

- funcion que inicia todo; por ejemplo:

Código ActionScript :

initTweens();

function initTweens() : void
{
    var alfa1:Tween = new Tween(tonica_mc, "alpha", Regular.easeIn, 0, 1, 5, true); 
    var alfa2:Tween = new Tween(tonica2_mc, "alpha", Regular.easeOut, 0, 0.6, 8, true); 
    var alfa3:Tween = new Tween(tonica3_mc, "alpha", Regular.easeOut, 0, 0.4, 10, true); 
 
 //Ahora los movimientos y los escalados en su caso    
 
    TweenLite.to(tonica3_mc, 8, {x:240, y:115, ease:Regular.easeOut}); 
 
//Desde el final de esta transición lanzo una función para dibujar un resplandor en el mc 
    TweenLite.to(tonica_mc, 8, {x:470, y:133, scaleX:0.4, scaleY:0.4, ease:Regular.easeOut, onComplete:shineTonica}); 
 
    TweenLite.from(tonica2_mc, 12, {x:-30, y:-150, ease:Regular.easeOut}); 
}


- al terminar uno de sus tween, llama a la siguiente (onComplete:shineTonica)
- la cadena sigue...
- al terminar el ultimo, llamamos al primero; por ejemplo:

Código ActionScript :

function finNikita():void{ 
        function alfaNikitacero():void{ 
            TweenMax.to(nikitas_mc, 5, {alpha:0, ease:Regular.easeOut, onComplete:initTweens}); 
        }; 
    var interNikita:Timer = new Timer(2000, 1); 
    interNikita.addEventListener(TimerEvent.TIMER, alfaNikitacero); 
    interNikita.start(); 
};

Ahi es donde esta la solucion; he agregado:
onComplete:initTweens

Listo el pollo :)

Por Acreonte

Claber

1543 de clabLevel

5 tutoriales
6 articulos

Genero:Masculino  

Digital Scientist

firefox
Citar            
MensajeEscrito el 13 May 2011 08:28 am
Sencillo y efectivo...!!!


Muchas gracias....!!!!


He tenido que hacer algunos cambios porque hacer esto ha "destapado" algunos fallos que había en el planteamiento de la animación, pero me has salvado de un importante escollo...


Gracias de nuevo.



Un saludo.

Por jclaguna

2 de clabLevel



 

España

chrome

 

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