动画,无非就是定时改变显示的内容。flash里边的动画是基于帧的。帧频就是每一秒播放多少帧,1/帧频 就是播放一帧对应的时间。
将帧频理解为“每秒播放多少帧”不如理解为“flash的刷新频率”更合适,因为,如果我们在某一帧写上stop(),虽然不会再向下播放,但是播放的swf动画依然在不停的刷新。
每次刷新时,flash都会为我们发送一个事件enterFrame
,同样,打开帮助,从MovieCLip的事件里边找到enterFrame
。
帮助中enterFrame
事件的描述:
[播放事件] 播放头进入新帧时调度。如果播放头不移动,或者只有一帧,则会继续以帧速率调度此事件。此事件为广播事件,这意味着具有注册了此事件的侦听器的所有显示对象都会调度此事件。
Event.ENTER_FRAME
常量定义 enterFrame
事件对象的
type
属性值。
也就是说,如果我们侦听enterFrame
事件,就可以以固定的频率来调用某个方法。
新建一个fla文档,然后在舞台上创建一个影片剪辑的实例,命名为mc,在第一帧写如下代码:
addEventListener(Event.ENTER_FRAME,enterFrameHandler);
function enterFrameHandler(e:Event):void{
mc.x=mc.x+5;
mc.scaleX=(mc.x+25)*0.002+1;
mc.scaleY=(mc.x+25)*0.002+1;
if(mc.x>575){
mc.x=-25;
}
}
调试一下,看看效果。
========================================
看看我们都做了什么:
首先我们侦听enterFrame
事件,每次侦听到enterFrame
事件都执行enterFrameHandler方法;
enterFrameHandler中(注意e:Event,参数e是Event类型的),我们改变了了影片剪辑mc的一些属性。x坐标和x、y方向的缩放(属性具体含义,可以查看帮助)。
我们定时改变了影片剪辑的属性,由于flashplayer是定时刷新的,当我们改变了影片剪辑的属性,下次刷新时影片剪辑的状态就改变了。动画就形成了。
扩展:
这里我写的是addEventListener(Event.ENTER_FRAME,enterFrameHandler);也可以写成mc.addEventListener(Event.ENTER_FRAME,enterFrameHandler);因为官方文档中说了“此事件为广播事件,这意味着具有注册了此事件的侦听器的所有显示对象都会调度此事件”,也就是说,所有的显示对象都可以侦听,这里我们只需要侦听到事件,达到定时的目的,所以用谁侦听都可以。addEventListener(Event.ENTER_FRAME,enterFrameHandler);就相当于this.addEventListener(Event.ENTER_FRAME,enterFrameHandler);this是什么比较难,不多说。想了解的话,可以trace一下,或者自己百度。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。