菜鸟走在AS3的路上--Timer类实现动画效果学习
作者:高原红 日期:2008-11-07
菜鸟走在AS3的路上--Timer类实现动画效果学习
在AS2时代,使用setInterval()进行特定的有间隔的事件处理,格式是:
setInterval(函数名,间隔时间)
清除时用:
clearInterval(间隔标记)
使用也是很方便的,到了AS3时代,这个事件也被封存进历史档案了。
前天,康老推荐了Timer类,今天研究了一下,原来Timer竟可以实现和setInterval()一样且更强大的功能。
Timer类是 Flash Player 计时器的接口。 它可以创建新的Timer 对象以运行一次或按指定间隔重复运行,从而按计划执行代码。所以它可以用来实现事件循环从而产生动画,和FRAME事件产生动画的原理一样,都是通过间隔一定的时间进行一次刷屏来实现动画效果。FRAME事件是以帧频为间隔来运行的,所以比较呆板点,而Timer事件却能自由定义间隔时间,简直太灵活了。可以这样说,用帧频动画实现的事件都可以使用Timer类的事件来实现。
它的用法:
要启动计时器,首先要创建 Timer 类的实例,并告诉它每隔多长时间生成一次计时器事件以及在停止前生成多少次事件。
如下例,Timer事件有两个参数,前面的1000代表事件执行的间隔,单位是毫秒,1000毫秒就是1秒,后面的60表示事件的持续时间,单位是秒。
var 计时实例:Timer = new Timer(1000, 60);
这样,Timer 对象在每次达到指定的间隔时(1秒)都会调度 TimerEvent 对象。TimerEvent 对象的事件类型是 timer,它由常量 TimerEvent.TIMER 定义,当然用字符串“timer”也是可以的。它的格式是:
计时实例.addEventListener(TimerEvent.TIMER, 执行的事件);
如果将 Timer 实例设置为固定的间隔数,则在达到最后一次间隔时,它还会调度 timerComplete 事件(由常量 TimerEvent.TIMER_COMPLETE 定义),在停止播放时侦听,来执行新的事件。
光这样定义了是不是计时事件都开始运行了呢?NO,还得启动计时器计时呢,格式是:
计时实例.start();
结束当然是:
计时实例.stop()
真是太方便了,快来试试吧。步骤:
1、 在图层1的第1-5帧各放一张图片。
2、 创建文档类,名称为“图片轮播”,输入代码:
程序代码
几点体会:
1、要注意Timer类的TimerEvent.TIMER事件,可能与Flash的刷屏不同步,会产生延迟现象。所以在使用的时候,需要使用updateAfterEvent()方法强制更新屏幕。
2、在写代码时,很自然地写了import flash.display.Sprite;,结果编译时出现“stop()未定义的提示”等,搜索了下,才知道stop()等这几个帧上的动作为flash.display.MovieClip的脚本,Sprite是不支持的。改成.MovieClip就OK了。
疑问:
如我上例中,若想一轮结束,第二轮开始,比如将Timer运行时间定为60秒等,图片就不播放了。我想可能是nextFrame()的问题,不知怎么改呢?
Flash动画
在AS2时代,使用setInterval()进行特定的有间隔的事件处理,格式是:
setInterval(函数名,间隔时间)
清除时用:
clearInterval(间隔标记)
使用也是很方便的,到了AS3时代,这个事件也被封存进历史档案了。
前天,康老推荐了Timer类,今天研究了一下,原来Timer竟可以实现和setInterval()一样且更强大的功能。
Timer类是 Flash Player 计时器的接口。 它可以创建新的Timer 对象以运行一次或按指定间隔重复运行,从而按计划执行代码。所以它可以用来实现事件循环从而产生动画,和FRAME事件产生动画的原理一样,都是通过间隔一定的时间进行一次刷屏来实现动画效果。FRAME事件是以帧频为间隔来运行的,所以比较呆板点,而Timer事件却能自由定义间隔时间,简直太灵活了。可以这样说,用帧频动画实现的事件都可以使用Timer类的事件来实现。
它的用法:
要启动计时器,首先要创建 Timer 类的实例,并告诉它每隔多长时间生成一次计时器事件以及在停止前生成多少次事件。
如下例,Timer事件有两个参数,前面的1000代表事件执行的间隔,单位是毫秒,1000毫秒就是1秒,后面的60表示事件的持续时间,单位是秒。
var 计时实例:Timer = new Timer(1000, 60);
这样,Timer 对象在每次达到指定的间隔时(1秒)都会调度 TimerEvent 对象。TimerEvent 对象的事件类型是 timer,它由常量 TimerEvent.TIMER 定义,当然用字符串“timer”也是可以的。它的格式是:
计时实例.addEventListener(TimerEvent.TIMER, 执行的事件);
如果将 Timer 实例设置为固定的间隔数,则在达到最后一次间隔时,它还会调度 timerComplete 事件(由常量 TimerEvent.TIMER_COMPLETE 定义),在停止播放时侦听,来执行新的事件。
光这样定义了是不是计时事件都开始运行了呢?NO,还得启动计时器计时呢,格式是:
计时实例.start();
结束当然是:
计时实例.stop()
真是太方便了,快来试试吧。步骤:
1、 在图层1的第1-5帧各放一张图片。
2、 创建文档类,名称为“图片轮播”,输入代码:
程序代码package {
import flash.utils.Timer;
import flash.events.TimerEvent;
//import flash.display.Sprite;
import flash.display.MovieClip
public class 图片轮播 extends MovieClip {
public function 图片轮播() {
//停止影片自动播放
stop();
// 创建一个新的60秒的 Timer
var Timer事件:Timer = new Timer(2000,6);
// 为间隔和完成事件指定侦听器
Timer事件.addEventListener(TimerEvent.TIMER, 事件1);
Timer事件.addEventListener(TimerEvent.TIMER_COMPLETE,事件2)
// 启动计时器计时
Timer事件.start();
}
public function 事件1(event:TimerEvent):void {
nextFrame();//影片转入下一帧播放
}
function 事件2(event:TimerEvent):void
{
gotoAndStop(1); //影片跳转到第一帧并停止播放
}
}
}
import flash.utils.Timer;
import flash.events.TimerEvent;
//import flash.display.Sprite;
import flash.display.MovieClip
public class 图片轮播 extends MovieClip {
public function 图片轮播() {
//停止影片自动播放
stop();
// 创建一个新的60秒的 Timer
var Timer事件:Timer = new Timer(2000,6);
// 为间隔和完成事件指定侦听器
Timer事件.addEventListener(TimerEvent.TIMER, 事件1);
Timer事件.addEventListener(TimerEvent.TIMER_COMPLETE,事件2)
// 启动计时器计时
Timer事件.start();
}
public function 事件1(event:TimerEvent):void {
nextFrame();//影片转入下一帧播放
}
function 事件2(event:TimerEvent):void
{
gotoAndStop(1); //影片跳转到第一帧并停止播放
}
}
}
几点体会:
1、要注意Timer类的TimerEvent.TIMER事件,可能与Flash的刷屏不同步,会产生延迟现象。所以在使用的时候,需要使用updateAfterEvent()方法强制更新屏幕。
2、在写代码时,很自然地写了import flash.display.Sprite;,结果编译时出现“stop()未定义的提示”等,搜索了下,才知道stop()等这几个帧上的动作为flash.display.MovieClip的脚本,Sprite是不支持的。改成.MovieClip就OK了。
疑问:
如我上例中,若想一轮结束,第二轮开始,比如将Timer运行时间定为60秒等,图片就不播放了。我想可能是nextFrame()的问题,不知怎么改呢?
Flash动画评论: 0 | 引用: 0 | 查看次数: -
发表评论
上一篇
下一篇


文章来自:
Tags: