flex – AS3:getTimer()方法和Timer类的准确度如何?

前端之家收集整理的这篇文章主要介绍了flex – AS3:getTimer()方法和Timer类的准确度如何?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在制作一个游戏(一个shmup),我开始质疑ActionScript中计时器的准确性.当然,当你想要在几秒或几秒的时间内完成时间时,它们是足够准确的,但是当你达到更精细的范围时,它似乎表现得非常糟糕.这使得像太空​​船每秒发射一百个激光器这样的事情变得非常困难.

在下面的示例中,我测试了间隔在1000个计时器刻度之间的时间长度(平均)为30ms.一次又一次,结果是~35-36ms.减少时间,我发现定时器延迟的时间为~16-17ms.这给了我一个~60的最大fps,这在视觉上是很好的,但也意味着我不可能每秒发射超过60个激光:-(.我在100和1000次循环中运行了几次这个测试,但对于这两个30ms测试和1ms测试结果没有变化.我最后打印到textField,因为使用trace()并在调试模式下启动swf似乎会对测试产生负面影响.所以我想知道的是:

>这个测试是衡量Timer类性能的一个不错的指标,还是我的结果有问题?
>这些结果会在其他机器上发生巨大变化吗?

我知道这取决于getTimer()方法的准确性,但我在这个主题上发现的讨论通常围绕getTimer()在更大间隔内的准确性.

  1. package
  2. {
  3. import flash.display.Sprite;
  4. import flash.events.TimerEvent;
  5. import flash.text.TextField;
  6. import flash.utils.getTimer;
  7. import flash.utils.Timer;
  1. public class testTimerClass extends Sprite
  2. {
  3. private var testTimer:Timer = new Timer(30,1000);
  4. private var testTimes:Array = new Array();
  5. private var testSum:int = 0;
  6. private var testAvg:Number;
  7. private var lastTime:int;
  8. private var thisTime:int;
  9.  
  10. public function testTimerClass()
  11. {
  12. testTimer.addEventListener(TimerEvent.TIMER,step);
  13. testTimer.addEventListener(TimerEvent.TIMER_COMPLETE,printResults);
  14. lastTime = getTimer();
  15. testTimer.start();
  16. }
  17.  
  18. private function step(event:TimerEvent):void
  19. {
  20. thisTime = getTimer();
  21. testTimes.push(thisTime - lastTime);
  22. lastTime = thisTime;
  23. }
  24.  
  25. private function printResults(event:TimerEvent):void
  26. {
  27. while (testTimes.length > 0)
  28. {
  29. testSum += testTimes.pop();
  30. }
  31. testAvg = testSum / Number(testTimer.repeatCount);
  32. var txtTestResults:TextField = new TextField();
  33. txtTestResults.text = testAvg.toString();
  34. this.addChild(txtTestResults);
  35. }
  36. }

}

我想最好的选择是在不同位置的同一帧中绘制多个激光器,避免使用多个Timer对象.

编辑:我使用stage.frameRate更改渲染frameRate并在几个帧速率上运行测试,但没有变化.

解决方法

Tinic Uro(Flash Player工程师)不久前写了一篇关于这个问题的 interesting blog帖子.

猜你在找的Flex相关文章