|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
用于设计和编辑Flash文档。1996年11月,美国Macromedia公司收购了FutureWave,并将其改名为Flash。后又被Adobe公司收购。
后面教程进修了FlashAS3教程:Random类,这篇我们一同来进修Motion类的利用办法和实例。
先来一个例子展现:
http://www.webjx.com/files/media/Motion.swf
这个类貌似是过剩的,归正就是Tween类,可是办理了动画大概播到一半就中断了等成绩,Tween播放到一半就中断了缘故原由是由于类中的侦听EnterFrame事务的时分,利用的是弱援用侦听体例,在播放的途中,被内存主动接纳了,因而播放到一半就短命了,办理举措嘛,除本人写一个,也能够往包中改一下Tween,把侦听改成强援用就好了
我团体是不太习气利用Tween的,因而我就写了这个类,本人利用嘛,人人以为还不错就拿往用吧
缓动的算法仍是利用ADOBE自带的谁人easing包
这个类属性和办法对照多。。耐烦看吧,跟Tween差不了太多的
类解说:
index.base.animation.Motion类:
代码:publicclassMotionextendsEventDispatcher
供应给程序员利用的动画类
机关函数:
publicfunctionMotion(target_:*,_attribute:String,_algorithm:Function,_begin:Number,_end:Number,_duration:uint=10)
与Tween千篇一律,只不外最初少了个属性是是不是以工夫盘算缓动,而该类只要以帧频盘算缓动
play办法:
publicfunctionplay():void
入手下手播放,并触发播放事务
假如正在播放,挪用该办法不会有甚么变更,只不外会触发播放事务
back办法:
publicfunctionback():void
同于play办法,分歧的是该办法是让动画反过去播放
resume办法:
publicfunctionresume():void
持续播放,仍然会触发播放事务
stop办法:
publicfunctionstop():void
中断播放,触发中断事务
假如是播放终了了,即还会触发播放终了事务
中断事务永久比播放终了事务提早调剂
reset办法:
publicfunctionreset():void
重置动画,复原到刚入手下手实例化的形态
不管是不是正在播放,城市触发中断事务
forward办法:
publicfunctionforward():void
快进到最初
rewind办法:
publicfunctionrewind():void
倒带到最前
next办法:
publicfunctionnext():void
向前播放一帧
假如是在播放中利用该办法,效果不是太分明
prev办法:
publicfunctionprev():void
向前播放一帧
假如是在播放中利用该办法,效果不是太分明
clear办法:
publicfunctionclear():void
扫除类中的援用,事务等
isBack属性(只读):
publicfunctiongetisBack():Boolean
是不是在回放形态
target属性(只读):
publicfunctiongettarget():*
猎取以后操纵的工具
current属性(只读):
publicfunctiongetcurrent():uint
猎取以后播放的地位
playing属性(只读):
publicfunctiongetplaying():Boolean
是不是正在播放
attribute属性:
publicvarattribute:String;
设置操纵的工具属性,没需要的情形下最好不要修正
begin属性:
publicvarbegin:Number;
设置操纵的工具初始属性,没需要的情形下最好不要修正
end属性:
publicvarend:Number;
设置操纵的工具停止属性,没需要的情形下最好不要修正
duration属性:
publicvarduration:uint;
设置工具从初始值,经由几帧,才活动到停止值
algorithm属性:
publicvaralgorithm:Function;
设置工具从初始值到停止值是以甚么算法举行活动
受回护的属性:
protectedvar_current:uint=0;
protectedfunctionupdata(isInit:Boolean=false):void
假如承继该类,则能够会见_current属性和updata办法,能够间接修正以后帧和强迫更新屏幕
举例:(下面谁人展现flash的源代码)
关于各类分歧的算法,举行效果展现,小小的偷了一下懒,利用的flash自带组件。。
CODE:
importfl.transitions.easing.*;
importindex.base.animation.Motion;
importindex.base.events.MotionEvent;
//算法数组
varclassAr:Array=[Back,Bounce,Elastic,None,Regular,Strong];
//初始小方块
varmc:MC=newMC;
mc.y=150;
addChild(mc);
//动画声明
varmotion:Motion=newMotion(mc,"x",Back.easeIn,50,350,40);
motion.addEventListener(MotionEvent.MOTION_UPDATA,motionUpdataFun);
motion.addEventListener(MotionEvent.MOTION_STOP,motionStopFun);
motion.addEventListener(MotionEvent.MOTION_PLAY,motionPlayFun);
motion.addEventListener(MotionEvent.MOTION_FINISH,motionFinishFun);
motion.play();
//动画播放终了
functionmotionFinishFun(e:MotionEvent){
traceText.appendText("播放终了
");
motion.isBack?motion.play():motion.back();
traceText.scrollV=traceText.maxScrollV;
}
//屏幕更新
functionmotionUpdataFun(e:MotionEvent){
currentText.text=motion.current.toString();
traceText.appendText("屏幕更新,以后帧"+motion.current+",X属性:"+mc.x+"
");
traceText.scrollV=traceText.maxScrollV;
}
//动画播放
functionmotionPlayFun(e:MotionEvent){
traceText.appendText("入手下手播放
");
traceText.scrollV=traceText.maxScrollV;
}
//动画中断
functionmotionStopFun(e:MotionEvent){
traceText.appendText("中断播放
");
traceText.scrollV=traceText.maxScrollV;
}
//侦听各个面板的change事务
classList.addEventListener("change",changeFun);
funcList.addEventListener("change",changeFun);
durationBar.addEventListener("change",changeFun);
playButton.addEventListener("click",clickFun);
//当属性面板产生数值改动,即触发
functionchangeFun(e:Event){
motion.rewind();
motion.algorithm=classAr[classList.selectedItem.data][funcList.selectedItem.data];
motion.duration=durationBar.value;
durationText.text=durationBar.value.toString();
}
//播放按钮
functionclickFun(e:Event){
if(playButton.selected)motion.resume();
elsemotion.stop();
}
//4个倒带行进等按钮事务
prevButton.addEventListener(MouseEvent.CLICK,function(){motion.prev()});
nextButton.addEventListener(MouseEvent.CLICK,function(){motion.next()});
forwardButton.addEventListener(MouseEvent.CLICK,function(){motion.forward()});
rewindButton.addEventListener(MouseEvent.CLICK,function(){motion.rewind()});
类源代码:CODE:
packageindex.base.animation{
importflash.events.Event;
importflash.events.EventDispatcher;
importindex.base.events.MotionEvent;
publicclassMotionextendsEventDispatcher{
//大众属性
publicvarattribute:String;
publicvarbegin:Number;
publicvarend:Number;
publicvarduration:uint;
publicvaralgorithm:Function;
//受回护的属性
protectedvar_current:uint=0;
//公有属性
privatevar_target:*;
privatevar_playing:Boolean=false;
privatevar_append:int=1;
publicfunctionMotion(target_:*,_attribute:String,_algorithm:Function,_begin:Number,_end:Number,_duration:uint=10){
_target=target_;
attribute=_attribute;
begin=_begin;
end=_end;
duration=_duration;
algorithm=_algorithm;
}
//入手下手播放
publicfunctionplay():void{
_append=1;
resume();
}
//回放
publicfunctionback():void{
_append=-1;
resume();
}
//持续播放
publicfunctionresume():void{
if(_playing)_target.removeEventListener(Event.ENTER_FRAME,enterFrameFun);
_playing=true;
_target.addEventListener(Event.ENTER_FRAME,enterFrameFun);
//触发入手下手播放事务
dispatchEvent(newMotionEvent(MotionEvent.MOTION_PLAY));
}
//帧频实行事务
privatefunctionenterFrameFun(e:Event):void{
if((_append==1&&_current>=duration)||(_append==-1&&_current<=0)){
stop();
}else{
_current+=_append;
updata();
}
}
//中断播放
publicfunctionstop():void{
_playing=false;
_target.removeEventListener(Event.ENTER_FRAME,enterFrameFun);
//触发中断事务
dispatchEvent(newMotionEvent(MotionEvent.MOTION_STOP));
//触发播放终了事务
if(_current==duration||_current==0)dispatchEvent(newMotionEvent(MotionEvent.MOTION_FINISH));
}
//更新动画
protectedfunctionupdata(isInit:Boolean=false):void{
if(isInit)_current=0;
_target[attribute]=algorithm(_current,begin,end-begin,duration);
//触发屏幕更新事务
dispatchEvent(newMotionEvent(MotionEvent.MOTION_UPDATA));
}
//重置
publicfunctionreset():void{
stop();
updata(true);
_append=1;
}
//行进到最初
publicfunctionforward():void{
_current=duration;
updata();
}
//倒带到最前
publicfunctionrewind():void{
_current=0;
updata();
}
//快进一帧
publicfunctionnext():void{
if(_current<duration){
_current+=1;
updata();
}
}
//前进一帧
publicfunctionprev():void{
if(_current>0){
_current-=1;
updata();
}
}
//扫除
publicfunctionclear():void{
_target.removeEventListener(Event.ENTER_FRAME,enterFrameFun);
_target=null;
algorithm=null;
}
//猎取是不是为回放形态
publicfunctiongetisBack():Boolean{
returnBoolean(_append-1);
}
//猎取缓动方针
publicfunctiongettarget():*{
return_target;
}
//猎取以后运转帧数
publicfunctiongetcurrent():uint{
return_current;
}
//猎取以后是不是在运转
publicfunctiongetplaying():Boolean{
return_playing;
}
}
}事务类源代码:CODE:
packageindex.base.events{
importflash.events.Event;
publicclassMotionEventextendsEvent{
publicstaticconstMOTION_STOP:String="motionStop";//播放中断
publicstaticconstMOTION_FINISH:String="motionFinish";//播放终了
publicstaticconstMOTION_PLAY:String="motionPlay";//入手下手播放
publicstaticconstMOTION_UPDATA:String="motionUpdata";//画面更新
publicfunctionMotionEvent(type:String,bubbles:Boolean=false,cancelable:Boolean=false){
super(type,bubbles,cancelable);
}
}
}
使用AdobeActionScript3.0开发高级的交互式项目。设计人员和开发人员可使用它来创建演示文稿、应用程序和其它允许用户交互的内容。 |
|