Movimento Contínuo de um movieclip em AS3
Autor: André Cupini | Publicado: 2009-01-30T18:38:00-02:00

Eu precisei criar uma animação aonde um movieclip desse a impressão de deslizar continuamente.Pensei que seria extremamente simples. Bastaria duplicar o movieclip e programar o Action no enterFrame.Porém me deparei com diversos problemas diferentes. Mas sem dúvida o mais intrigante foi o fato de que usando Tween e o evento EnterFrame eu não tinha a precisão necessária para saber o momento exato em que o movieclip saía do palco para posicioná-lo novamente no início e ficar aguardando sua vez de "deslizar" novamente, após o seu clone já ter passado completamente pela margem direita.Enfim, foram várias tentativas frustradas para chegar no resultado desejado.Espero que isto seja útil para mais alguém neste mundo.Segue a Classe em Action Script 3:package {   import flash.display.Sprite;   import fl.transitions.Tween;   import fl.motion.easing.Linear;   import flash.events.*;   public class MovimentoContinuo extends Sprite {       var mc1:Sprite=new Sprite();       var mc2:Sprite=new Sprite();       var mc1Pos:int=stage.stageWidth;       var mc2Pos:int=stage.stageWidth;       var mc1Moving:Boolean=true;       var mc2Moving:Boolean=false;       var mc1Waiting:Boolean=false;       var mc2Waiting:Boolean=true;       function MovimentoContinuo() {           criaMc1();           criaMc2();           addChild(mc1);           addChild(mc2);           addEventListener(Event.ENTER_FRAME, myEnterFrame);           addEventListener(MouseEvent.MOUSE_OVER, mcMouseOver);           addEventListener(MouseEvent.MOUSE_OUT, mcMouseOut);       }       function myEnterFrame(evt:Event) {           // Movie Clip 1           if (mc1Moving) {               mc1.x=--mc1Pos;               // Se MC1 entrou completamente no palco MC2 inicia movimento               if (mc1.x==(stage.stageWidth - mc1.width)) {                   mc2Moving=true;                   mc2Waiting = false;               }                             if (mc1.x==mc1.width*-1) {                   // Se MC1 saiu do palco, volta à posição inicial e aguarda                   mc1.x=stage.stageWidth;                   mc1Pos=stage.stageWidth;                   mc1Moving = false;                   mc1Waiting = true;               }                          }                     // Movie Clip 2           if (mc2Moving) {               mc2.x=mc2Pos--;               // Se MC2 entrou completamente no palco MC1 inicia movimento               if (mc2.x==(stage.stageWidth - mc2.width)) {                   mc1Moving=true;                   mc1Waiting = false;               }               // Se MC2 saiu do palco, volta à posição inicial e aguarda               if (mc2.x==mc2.width*-1) {                   mc2.x=stage.stageWidth;                   mc2Pos=stage.stageWidth;                   mc2Moving = false;                   mc2Waiting = true;                                  }                          }       }             // Pause       function mcMouseOver(evt:Event) {           mc1Moving=false;           mc2Moving=false;       }       // Resume       function mcMouseOut(evt:Event) {           if (!mc1Waiting) {               mc1Moving = true;           }           if (!mc2Waiting) {               mc2Moving = true;           }       }       // Cria e Posiciona MC1       function criaMc1() {           mc1.graphics.beginFill(0xFF0000);           mc1.graphics.drawRect(0, 0, 600, 80);           mc1.name="mc1";           mc1.alpha=0.6;           mc1.x=stage.stageWidth;       }       // Cria e Posiciona MC2       function criaMc2() {           mc2.graphics.beginFill(0x0000FF);           mc2.graphics.drawRect(0, 0, 600, 80);           mc2.name="mc2";           mc2.alpha=0.4;           mc2.x=stage.stageWidth;       }   }}