【问题标题】:Flash AS3 Timer extremely offFlash AS3 Timer 极度关闭
【发布时间】:2010-10-21 08:53:59
【问题描述】:

我将 Flash CS4 与 AS3 一起使用。 我想要一个计时器以 50 毫秒的间隔调用一个函数 100 次。但是计时器花费的时间比它应该的要长得多,在 100 次重复后加起来 1677 毫秒(1.677 秒!)太多了。我在这里遗漏了什么还是计时器不准确?

代码

function test(event:TimerEvent):void{
   trace("GetTimer(): " + getTimer() + " || Timer.currentCount: " + _timer.currentCount);
}

var _timer:Timer = new Timer(50, 100); 
_timer.addEventListener(TimerEvent.TIMER, test); 
_timer.start();

跟踪输出:

GetTimer(): 74 || Timer.currentCount: 1

GetTimer(): 140 || Timer.currentCount: 2

GetTimer(): 209 || Timer.currentCount: 3

GetTimer(): 275 || Timer.currentCount: 4

GetTimer(): 340 || Timer.currentCount: 5

GetTimer(): 407 || Timer.currentCount: 6

GetTimer(): 476 || Timer.currentCount: 7

GetTimer(): 542 || Timer.currentCount: 8

GetTimer(): 608 || Timer.currentCount: 9

GetTimer(): 677 || Timer.currentCount: 10

......

GetTimer(): 3340 || Timer.currentCount: 50

......

GetTimer(): 6677 || Timer.currentCount: 100

感谢您的帮助。

问候,

克里斯

【问题讨论】:

    标签: flash actionscript-3 timer


    【解决方案1】:

    不要在如此小的间隔内使用Timer。 Flash 中的计时不是一个简单的话题,请参阅this 开始。要测量 50 毫秒,我建议使用 getTimer() 函数和 ENTER_FRAME 事件来检查时间间隔是否已过。

    【讨论】:

    • getTimer() 应该使用非常重要的精度。
    • @Muhammad Irfan - getTimer() 并不比 Timer 对象更精确。
    • @Allan - getTimer 允许手动回调调用,而 Timer 可以累积错误,如问题所示。
    • 是的,我知道(我同意你的回答),但评论似乎暗示 getTimer() 是基于不同且更准确的计时器系统(我就是这么读的)。跨度>
    【解决方案2】:

    很多因素都会影响计时器的准确性。 SWF 帧率,其他进程,基本上是你电影的一般环境。

    【讨论】:

      【解决方案3】:

      如果我是你,我会计算帧之间的毫秒数(1000 / fps)并决定每隔一定数量的帧调用一个函数。这个数量是否超过 1:

      var counter:int = 0;
      const COUNT_TO_INVOKE: int = 2;//if calling every 3 frames
      function onEnterFrame(e: Event):void{
          counter++;
          if(counter == COUNT_TO_INVOKE){
              timerFunction();
              counter = 0; 
          }
      }
      

      【讨论】:

      • 真实 FPS 在负载下可能会有所不同。
      • 是的,有时最好跳过函数调用然后继续加载系统(并扩大帧延迟)
      【解决方案4】:

      【讨论】:

        猜你喜欢
        • 2010-09-20
        • 1970-01-01
        • 1970-01-01
        • 2012-07-20
        • 1970-01-01
        • 2018-03-26
        • 2011-06-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多