Timer是依赖于帧率的?

我知道,Timer是不准确的。但是,我从来没有想过,Timer是依赖于frameRate的。

看下面的代码,你认为 _delay 的值是多少?我想,如果不是500,也应该是501,498之类的……

但是,结果却是 500,1000,500,1000 的顺序间隔。不信就试试看 :wink:

**2011-05-16 17:06更新:**貌似,将帧率设置成30也不准!我的FP是10.2.152.32,难道是传说中的BUG?

**2011-05-16 18:10更新:**看了跑道模型和FP的渲染模式,但也无法解释这种现象:

如果是说Timer受到跑道模型的影响,为何enterFrame是准确的?

按跑道模型,EnterFrame事件应该在跑道模型第1步的时候执行,而Timer也是在这个时候进行计算的。如果enterFrame准确,那么timer也应该准确,起码不应该相差太多才是。

可是500ms的差别,太大了。

关于跑道模型的文章:

Flash Player 10.1内部机制(第二部分) -执行模型之可变跑道

Flash Player 10.1内部机制(第二部分) -执行模型之可变跑道(扩展)

 1package
 2{
 3import flash.utils.Timer;
 4import flash.events.TimerEvent;
 5import flash.utils.getTimer;
 6import flash.display.Sprite;
 7import flash.events.MouseEvent;
 8import flash.display.BitmapData;
 9import flash.events.Event;
10
11/**
12 * 测试在CPU高负载的时候Timer与EnterFrame的间隔
13 */
14[SWF(frameRate=2)]
15public class RunTest extends Sprite
16{
17
18    public function RunTest()
19    {
20        _timer = new Timer(500);
21        _timer.addEventListener(TimerEvent.TIMER, handler_timer);
22        _timer.start();
23        this.stage.addEventListener(MouseEvent.CLICK, handler_click);
24        //this.stage.addEventListener(Event.ENTER_FRAME, handler_enterFrame);
25    }
26
27    private var _timer:Timer;
28    private var _elapse:int = 0;
29    private var _delay:int = 0;
30
31    public function updateTime():void
32    {
33        var __thisTime:int = getTimer();
34        _delay = __thisTime - _elapse;
35        trace('_elapse:', _elapse, ',_delay:', _delay, ',getTimer:', getTimer());
36        _elapse = __thisTime;
37    }
38
39    public function handler_timer($evt:TimerEvent):void
40    {
41        updateTime();
42    }
43
44    public function handler_enterFrame($evt:Event):void
45    {
46        updateTime();
47    }
48
49    public function handler_click($evt:MouseEvent):void
50    {
51        trace('draw');
52        for(var i:int=0;i<1000; i++)
53        {
54            var __aaa:BitmapData = new BitmapData(550, 400);
55            __aaa.draw(this);
56        }
57    }
58}
59}

找到几篇类似中文文章介绍Timer的准确性问题: