仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 779|回复: 8
打印 上一主题 下一主题

[学习教程] 来一发Flash AS3教程:Motion类-Flash actionscript

[复制链接]
谁可相欹 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-15 22:49:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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开发高级的交互式项目。设计人员和开发人员可使用它来创建演示文稿、应用程序和其它允许用户交互的内容。
谁可相欹 该用户已被删除
沙发
 楼主| 发表于 2015-1-17 18:54:42 | 只看该作者
flash的优缺点可以如何运用呢?
山那边是海 该用户已被删除
板凳
发表于 2015-1-24 12:38:50 | 只看该作者
商业上的优势——品牌flash的创造;公司企业的flash宣传;flash技术在电视的应用
因胸联盟 该用户已被删除
地板
发表于 2015-2-1 16:00:49 | 只看该作者
FLASH在网站建设过程中既然有这么多的问题,那为什么我们还继续使用FLASH,不可否认FLASH的问题的确存在,但也不可忽视FLASH在网站建设中。
愤怒的大鸟 该用户已被删除
5#
发表于 2015-2-7 08:45:40 | 只看该作者
对插件的批评之一是他们一般出现在称为Box的网页的一个预定的区域。虽然在某种情况下表现不错,但Box经常以罪魁祸首的面目出现。
若相依 该用户已被删除
6#
发表于 2015-2-21 17:50:03 | 只看该作者
FLASH广告的问题主要表现在:
小女巫 该用户已被删除
7#
发表于 2015-3-6 21:24:43 | 只看该作者
不能设置“alt”属性,失去了一次被搜说引擎检索到的机会。
再现理想 该用户已被删除
8#
发表于 2015-3-13 22:08:47 | 只看该作者
只要用心 只要努力 在加上你无限的创意和想象。FLASH无敌了
冷月葬花魂 该用户已被删除
9#
发表于 2015-3-20 21:09:35 | 只看该作者
FLASH动画在如今的很多网站中都比较常见,其所独有的视觉效果和感染力成为各行各业宣传企业形象、推广产品的最佳平台。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 06:49

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表