Flash-ENTER_FRAME,Timer,setInterval,setTimeout AND frameRate
ENTER_FRAME跟帧频直接相关,而Timer和setInterval,setTimeout则和帧频完全木有关系。
修正:刚看了下F1关于Timer类的部分:
包 flash.utils
类 public class Timer
继承 Timer EventDispatcher Object
语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9
Timer 类是 Flash Player 计时器的接口。 可以创建新的 Timer 对象,以便按指定的时间顺序运行代码。 使用 start() 方法来启动计时器。 为 timer 事件添加事件侦听器,以便将代码设置为按计时器间隔运行。
可以创建 Timer 对象以运行一次或按指定间隔重复运行,从而按计划执行代码。 取决于 SWF 文件的帧频或 Flash Player 的环境(可用内存及其它因素),Flash Player 会能会按稍有偏差的间隔调度事件。 例如,如果某个 SWF 文件设置为以每秒 10 帧 [fps](也就是 100 毫秒的间隔)的速度播放,但计时器设置为在 80 毫秒时触发事件,则 Flash Player 将按接近于 100 毫秒的间隔触发事件。 大量耗费内存的脚本也可能使事件发生偏差。
SO,Time和帧频是有关系的~
另外,Flash CS3帮助文档中推荐使用Timer而不要再使用setInterval,setTimeout,setInterval可以用Timer直接代替,而setTimeout可以用Timer(xxx,1)代替。
用于测试的代码如下,PS:Flash帧频设置为1。
//ENTER_FRAME 每秒输出一个enterframe
btn_e.addEventListener (MouseEvent.CLICK,showEnterframe);
function showEnterframe (_vet:MouseEvent) {
stage.addEventListener (Event.ENTER_FRAME,enterframe);
function enterframe (_evt:Event) {
trace ("enterframe");
}
}
//Timer 每10毫秒输出一个timer
btn_t.addEventListener (MouseEvent.CLICK,showTimer);
function showTimer (_vet:MouseEvent) {
var t:Timer=new Timer(10);
t.addEventListener (TimerEvent.TIMER,timer);
t.start ();
function timer (_evt:TimerEvent) {
trace ("timer");
}
}
//setInterval
btn_i.addEventListener (MouseEvent.CLICK,showInterval);
function showInterval (_vet:MouseEvent) {
var i=setInterval(showI,1000);
function showI () {
trace ("setInterval");
}
}
Flash里帧频的极限是0.01-120,如果设置超过了,Flash Player将使用它能达到的最大帧频或者最小帧频运行。
Flash中无法达到很精确的时间,因为这跟运行Flash的硬件有很大的关系。
April 14th, 2010 - 09:23
而Timer和setInterval,setTimeout则和帧频完全木有关系
有关系的~~
————————————————————————————————————————————————————http://hi.baidu.com/zidiqingfeng/blog
.-= zidiqingfeng´s last blog ..·<html>·for…in在javascript的应用 =-.
[Reply]
DFdou Reply:
2010-4-14 at 10:35 am
@zidiqingfeng, 恩,。刚看了下F1,的确是的,,,更正下更正下~
[Reply]