com.neolao.movieclip.animations.MoveTransition
Déplacement d'un MovieClip. Ca gère aussi la rotation et le redimensionnement.
Classes recquises:
Exemples
import com.neolao.math.easing.Elastic; var o:MoveTransition = new MoveTransition(truc_mc); o.duration = 40; o.phasing = 15; o.callBackEnd = function(){ trace("fini!"); }; o.play({_x:100, _y:50}, Elastic.easeOut);
Constructeur
Initialisation
- pTarget:MovieClip La cible de l'animation
- pPosEnd:Object Les paramètres de l'état final de l'animation
- pEasing:Function La fonction de déplacement
Propriétés
Visibilité | Type | Nom | Status | Description |
---|---|---|---|---|
public | Function | easing | Lecture & Ecriture | La fonction de déplacement |
public | Number | duration | Lecture & Ecriture | La durée de l'animation en frame |
public | Number | acceleration | Lecture & Ecriture | L'accélération de l'animation |
public | Number | phasing | Lecture & Ecriture | La fréquence de l'animation |
Méthodes
Visibilité | Return | Nom | Param 1 | Param 2 | Description |
---|---|---|---|---|---|
public | Void | play | pPosEnd:Object | pEasing:Function | Lancer l'animation |
public | Void | stop | Stopper l'animation |
Evénements
Nom | Description |
---|---|
callBackEnd | Evénement invoqué lorsque l'animation est terminée et a comme base la cible de l'animation |
Source
import com.neolao.controls.EnterFrame; /** * @author neolao <neo@neolao.com> * @version 1.1 (09/08/2004) * @link http://resources.neolao.com/flash/classes/movieclip/animations/MoveTransition * @license http://creativecommons.org/licenses/by-sa/2.0/ */ class com.neolao.movieclip.animations.MoveTransition { public var className:String = "MoveTransition"; public var version:String = "1.1"; // ----------------------------- CONSTANTES -------------------------------- // ----------------------------- VARIABLES --------------------------------- private var _posStart:Object; private var _posEnd:Object; private var _target:MovieClip; private var _iterator:Number; private var _active:Boolean; public var easing:Function; public var duration:Number; public var acceleration:Number; public var phasing:Number; // ----------------------------- EVENEMENTS -------------------------------- /** * Evénement invoqué lorsque l'animation est terminée et a comme base la cible de l'animation */ private var callBackEnd:Function; /*============================= CONSTRUCTEUR =============================*/ /*========================================================================*/ /** * Initialisation * @param pTarget La cible de l'animation * @param pPosEnd Les paramètres de l'état de fin d'animation * @param pEasing Le easing utilisé */ function MoveTransition(pTarget:MovieClip, pPosEnd:Object, pEasing:Function){ // Paramètres par défaut duration = 50; acceleration = 0; phasing = 0; _active = false; EnterFrame.include; _target = pTarget; _posStart = new Object(); _posStart._x = pTarget._x; _posStart._y = pTarget._y; _posStart._rotation = pTarget._rotation; _posStart._xscale = pTarget._xscale; _posStart._yscale = pTarget._yscale; if(pPosEnd != undefined){ _posEnd = pPosEnd; } if(pEasing != undefined){ easing = pEasing; } } /*======================= FIN = CONSTRUCTEUR = FIN =======================*/ /*========================================================================*/ /*=========================== METHODES PRIVEES ===========================*/ /*========================================================================*/ /** * Vérification des positions */ private function _checkPositions(){ var vBase:MovieClip = _target; if(_posStart == undefined){ _posStart = new Object(); } if(_posStart._x == undefined){ _posStart._x = vBase._x; } if(_posStart._y == undefined){ _posStart._y = vBase._y; } if(_posStart._rotation == undefined){ _posStart._rotation = vBase._rotation; } if(_posStart._xscale == undefined){ _posStart._xscale = vBase._xscale; } if(_posStart._yscale == undefined){ _posStart._yscale = vBase._yscale; } if(_posEnd == undefined){ _posEnd = new Object(); } if(_posEnd._x == undefined){ _posEnd._x = vBase._x; } if(_posEnd._y == undefined){ _posEnd._y = vBase._y; } if(_posEnd._rotation == undefined){ _posEnd._rotation = vBase._rotation; } if(_posEnd._xscale == undefined){ _posEnd._xscale = vBase._xscale; } if(_posEnd._yscale == undefined){ _posEnd._yscale = vBase._yscale; } } /*===================== FIN = METHODES PRIVEES = FIN =====================*/ /*========================================================================*/ /*============================ GETTER SETTER ============================*/ /*========================================================================*/ // MODIFICATION DES PARAMETRES public function set positionEnd(pPosEnd:Object){ _posEnd = pPosEnd; } public function get positionEnd():Object{ return _posEnd; } public function get active():Boolean{ return _active; } /*====================== FIN = GETTER SETTER = FIN ======================*/ /*========================================================================*/ /*========================== METHODES PUBLIQUES ==========================*/ /*========================================================================*/ /** * La fonction exécutée pendant l'animation */ public function onEnterFrame(){ var vBase:MovieClip = _target; var vStartX:Number = _posStart._x; var vStartY:Number = _posStart._y; var vStartRotation:Number = _posStart._rotation; var vStartXScale:Number = _posStart._xscale; var vStartYScale:Number = _posStart._yscale; var vEndX:Number = _posEnd._x; var vEndY:Number = _posEnd._y; var vEndRotation:Number = _posEnd._rotation; var vEndXScale:Number = _posEnd._xscale; var vEndYScale:Number = _posEnd._yscale; var vMargin:Number = 2; vBase._x = easing(_iterator, vStartX, vEndX-vStartX, duration, acceleration, phasing); vBase._y = easing(_iterator, vStartY, vEndY-vStartY, duration, acceleration, phasing); vBase._rotation = easing(_iterator, vStartRotation, vEndRotation-vStartRotation, duration, acceleration, phasing); vBase._xscale = easing(_iterator, vStartXScale, vEndXScale-vStartXScale, duration, acceleration, phasing); vBase._yscale = easing(_iterator, vStartYScale, vEndYScale-vStartYScale, duration, acceleration, phasing); if(vBase._xscale < 0){ vBase._xscale = 1; } if(vBase._yscale < 0){ vBase._yscale = 1; } // On s'assure que la cible ne bouge plus pour stopper l'animation if((vBase._x > vEndX - vMargin && vBase._x < vEndX + vMargin) && (vBase._y > vEndY - vMargin && vBase._y < vEndY + vMargin) && (vBase._rotation > vEndRotation - vMargin && vBase._rotation < vEndRotation + vMargin) && (vBase._xscale > vEndXScale - vMargin && vBase._xscale < vEndXScale + vMargin) && (vBase._yscale > vEndYScale - vMargin && vBase._yscale < vEndYScale + vMargin)){ vBase._x = vEndX; vBase._y = vEndY; vBase._rotation = vEndRotation; vBase._xscale = vEndXScale; vBase._yscale = vEndYScale; this.stop(); this.callBackEnd.apply(vBase); } _iterator++; } /** * Lance l'animation * @param pPosEnd Les paramètres de l'état de fin d'animation * @param pEasing Le easing utilisé */ public function play(pPosEnd:Object, pEasing:Function){ var vBase:MovieClip = _target; _iterator = 0; _posStart = {_x:vBase._x, _y:vBase._y, _rotation:vBase._rotation, _xscale:vBase._xscale, _yscale:vBase._yscale}; if(pPosEnd != undefined){ _posEnd = pPosEnd; } if(pEasing != undefined){ easing = pEasing; } // Vérification des positions _checkPositions(); EnterFrame.addListener(this, onEnterFrame); _active = true; } /** * Arrête l'animation */ public function stop(){ EnterFrame.removeListener(this); _active = false; } /*==================== FIN = METHODES PUBLIQUES = FIN ====================*/ /*========================================================================*/ }