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 ====================*/
	/*========================================================================*/
}