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的准确性问题:
- 文章ID:1322
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/timer-require-framerate/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。