Flash AS3教程:Motion類

類源代碼:
CODE:
package index.base.animation{
事件類源代碼:
import flash.events.Event;
import flash.events.EventDispatcher;
import index.base.events.MotionEvent;
public class Motion extends EventDispatcher{
//公共屬性
public var attribute:String;
public var begin:Number;
public var end:Number;
public var duration:uint;
public var algorithm:Function;
//受保護(hù)的屬性
protected var _current:uint = 0;
//私有屬性
private var _target:*;
private var _playing:Boolean = false;
private var _append:int = 1;
public function Motion(target_:*,_attribute:String,_algorithm:Function,_begin:Number,_end:Number,_duration:uint = 10){
_target = target_;
attribute = _attribute;
begin = _begin;
end = _end;
duration = _duration;
algorithm = _algorithm;
}
//開始播放
public function play():void{
_append = 1;
resume();
}
//回放
public function back():void{
_append = -1;
resume();
}
//繼續(xù)播放
public function resume():void{
if(_playing) _target.removeEventListener(Event.ENTER_FRAME,enterFrameFun);
_playing = true;
_target.addEventListener(Event.ENTER_FRAME,enterFrameFun);
//觸發(fā)開始播放事件
dispatchEvent(new MotionEvent(MotionEvent.MOTION_PLAY));
}
//幀頻執(zhí)行事件
private function enterFrameFun(e:Event):void{
if((_append == 1 && _current >= duration) || (_append == -1 && _current <= 0)){
stop();
}else{
_current = _append;
updata();
}
}
//停止播放
public function stop():void{
_playing = false;
_target.removeEventListener(Event.ENTER_FRAME,enterFrameFun);
//觸發(fā)停止事件
dispatchEvent(new MotionEvent(MotionEvent.MOTION_STOP));
//觸發(fā)播放完畢事件
if(_current == duration || _current == 0) dispatchEvent(new MotionEvent(MotionEvent.MOTION_FINISH));
}
//更新動畫
protected function updata(isInit:Boolean = false):void{
if(isInit) _current = 0;
_target[attribute] = algorithm(_current,begin,end - begin,duration);
//觸發(fā)屏幕更新事件
dispatchEvent(new MotionEvent(MotionEvent.MOTION_UPDATA));
}
//重置
public function reset():void{
stop();
updata(true);
_append = 1;
}
//前進(jìn)到最后
public function forward():void{
_current = duration;
updata();
}
//倒帶到最前
public function rewind():void{
_current = 0;
updata();
}
//快進(jìn)一幀
public function next():void{
if(_current < duration){
_current = 1;
updata();
}
}
//后退一幀
public function prev():void{
if(_current > 0){
_current -= 1;
updata();
}
}
//清除
public function clear():void{
_target.removeEventListener(Event.ENTER_FRAME,enterFrameFun);
_target = null;
algorithm = null;
}
//獲取是否為回放狀態(tài)
public function get isBack():Boolean{
return Boolean(_append - 1);
}
//獲取緩動目標(biāo)
public function get target():*{
return _target;
}
//獲取當(dāng)前運(yùn)行幀數(shù)
public function get current():uint{
return _current;
}
//獲取當(dāng)前是否在運(yùn)行
public function get playing():Boolean{
return _playing;
}
}
}
CODE:
package index.base.events{
import flash.events.Event;
public class MotionEvent extends Event{
public static const MOTION_STOP:String = "motionStop";//播放停止
public static const MOTION_FINISH:String = "motionFinish";//播放完畢
public static const MOTION_PLAY:String = "motionPlay";//開始播放
public static const MOTION_UPDATA:String = "motionUpdata";//畫面更新
public function MotionEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false){
super(type,bubbles,cancelable);
}
}
}
相關(guān)文章
flash cs6鼠標(biāo)跟隨效果實(shí)現(xiàn)代碼分享
flash cs6想要實(shí)現(xiàn)鼠標(biāo)跟隨效果?該怎么制作呢?今天我們就來看看使用as2.0實(shí)現(xiàn)鼠標(biāo)跟隨效果的教程,需要的朋友可以參考下2019-05-19- Flash cs6怎么使用代碼輸入中英文文本?Flash cs6中可以使用文字工具直接輸入文本,也可以使用代碼來輸入文本,該怎么使用代碼輸入文本呢?請看下文詳細(xì)的教程,需要的朋友2018-03-11
- flash as3.0抽象類怎么定義? as3.0中有很多抽象類,該怎么定義抽象類和抽象方法呢?下面我們就來看看簡單的例子,需要的朋友可以參考下http://www.dbjr.com.cn/softs/408402.2018-02-28
flash cs6中怎么使用ActionScript3.0?
flash cs6中怎么使用ActionScript3.0?flash cs6中想要使用ActionScript3.0功能,該怎么使用呢?下面我們就來看看詳細(xì)的教程,需要的朋友可以參考下2018-01-25Flash中怎么實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊決定圖像位置?
本教程給大家分享一個Flash小教程,教大家在Flash CS6中怎么實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊決定圖像位置?方法很簡單,感興趣的朋友歡迎前來一起分享學(xué)習(xí)2018-01-12- 本教程教腳本之家的ActionScript教程學(xué)習(xí)者在Flash中如何用代碼將圖片放在自己想要的舞臺位置,教程講解的詳細(xì),感興趣的朋友歡迎前來分享學(xué)習(xí)2017-11-20
在Flash CS6中使用with函數(shù)繪制背景圖教程
本教程教腳本之家的ActionScript教程學(xué)習(xí)者如何在Flash CS6中使用with函數(shù)繪制背景圖?教程一步步講解的挺詳細(xì),方法也不難,非常適合Flash新手入門學(xué)習(xí)2017-11-18Flash怎么設(shè)置元件坐標(biāo)?flash使用代碼設(shè)置元件的坐標(biāo)的教程
Flash怎么設(shè)置元件坐標(biāo)?flash中導(dǎo)如的元件需要添加坐標(biāo),該怎么定位元件坐標(biāo)呢?下面我們就來看看flash使用代碼設(shè)置元件的坐標(biāo)的教程,需要的朋友可以參考下2017-10-11- Flash怎么制作來回?fù)u擺的花朵的動畫?Flash中想要給花朵制作一段搖擺的動畫效果,該怎么制作呢?下面我們就來看看詳細(xì)的教程,很簡單,需要的朋友可以參考下2017-05-23
- Flash怎么制作流動七彩色的文字?想要讓文字動起來,該怎么使用flash給文字制作一個流動七彩色的動畫呢?下面我們就來看看詳細(xì)的教程,需要的朋友可以參考下2017-04-23