Flash AS3教程:Motion类(2)

http://www.itjxue.com  2015-07-17 23:39  来源:未知  点击次数: 

类源代码:

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;
               
                //受保护的属性
                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();
                }
               
                //继续播放
                public function resume():void{
                        if(_playing) _target.removeEventListener(Event.ENTER_FRAME,enterFrameFun);
                        _playing = true;
                        _target.addEventListener(Event.ENTER_FRAME,enterFrameFun);
                       
                        //触发开始播放事件
                        dispatchEvent(new MotionEvent(MotionEvent.MOTION_PLAY));
                }
               
                //帧频执行事件
                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);
                       
                        //触发停止事件
                        dispatchEvent(new MotionEvent(MotionEvent.MOTION_STOP));
                        //触发播放完毕事件
                        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);
                       
                        //触发屏幕更新事件
                        dispatchEvent(new MotionEvent(MotionEvent.MOTION_UPDATA));
                }
               
                //重置
                public function reset():void{
                        stop();
                        updata(true);
                        _append = 1;
                }
               
                //前进到最后
                public function forward():void{
                        _current = duration;
                        updata();
                }
               
                //倒带到最前
                public function rewind():void{
                        _current = 0;
                        updata();
                }
               
                //快进一帧
                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;
                }
               
                //获取是否为回放状态
                public function get isBack():Boolean{
                        return Boolean(_append - 1);
                }
               
                //获取缓动目标
                public function get target():*{
                        return _target;
                }
               
                //获取当前运行帧数
                public function get current():uint{
                        return _current;
                }
               
                //获取当前是否在运行
                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);
                }
        }
}

(责任编辑:IT教学网)

更多

推荐Flash actionscript文章