【问题标题】:ActionScript 3: Measuring elapsed time between enterFrame eventsActionScript 3:测量 enterFrame 事件之间经过的时间
【发布时间】:2009-05-30 13:31:52
【问题描述】:

我有一个 EnterFrame 事件,我想知道调用之间的确切时间,这样当计算机无法产生所需的帧速率时,我将能够更流畅地为对象制作动画。

【问题讨论】:

    标签: actionscript-3


    【解决方案1】:

    更具体一点。

    currentTime = getTimer();
    diff = currentTime - prevTime;
    
    prevTime = currentTime;//update for next go around
    

    编辑

    getTimer 需要你导入包:flash.utils.getTimer;

    【讨论】:

      【解决方案2】:

      使用 getTimer(); ?

      【讨论】:

        【解决方案3】:

        正如其他人所说,getTimer 是最好的方法......但我想提出其他建议: 如果您想做基于时间的动画,即基于更新的帧,您还可以尝试一些更大的 ActionScript 补间库,如 caurina Tweener ...他们只是开箱即用并提供其他出色的功能...

        问候

        back2dos

        【讨论】:

          【解决方案4】:

          您应该使用内置的Timer 函数以某种方式以某种方式调用方法* ENTER_FRAME 独立方式。

          var timer:Timer = new Timer(500, 0);
          timer.addEventListener(TimerEvent.TIMER, timerHandler);
          timer.start();
          
          private function timerHandler(event:TimerEvent):void
          {
              // do something
          
              // *EDIT* Thanks @Luke spotting this out (check comments)
              event.updateAfterEvent();
          
          }
          

          *) 你仍然需要记住,事件处理程序不会在帧之间触发,所以如果你的脚本滞后(因为其他一些进程),这个调用也会被延迟。 准确地说,方法调用将近似于设置的延迟时间同时或刚执行的帧。

          【讨论】:

          • 一个问题,或者说你不需要这样做的原因是渲染不会更新,直到下一个进入帧,所以没有理由不等待它并更新那么你的财产。此外,通过使用 getTimer 方法,您使用的是始终存在的内部计时器,而不是创建一个新的计时器,这更清洁并且为您的应用程序增加了更少的“重量”。 (并不是说 Timer 和事件会增加很多权重)
          • 好的。这并不完全正确。如果您查看文档,您会看到 TimerEvent 有一个名为 updateAfterEvent 的方法。这种方法让您可以独立于设置的帧速率更新屏幕。
          • 正确!忘了那个!
          • 干杯卢克。我在示例中添加了代码。对此非常好奇,值得在不同场景(繁重的显示列表、后台进程等)中进行一些基准测试,以验证可靠性。 @kalvi,如果让我们知道这在您的情况下是如何解决的,将会很有趣。谢谢,
          猜你喜欢
          • 1970-01-01
          • 2023-03-26
          • 1970-01-01
          • 2021-09-15
          • 2012-06-29
          • 1970-01-01
          • 2017-07-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多