Actionscript 3 equivalent to XNA ElapsedGameTime

本文关键字:XNA ElapsedGameTime to equivalent Actionscript | 更新日期: 2023-09-27 18:37:08

我通常使用XNA开发游戏,使用XNA时要做的一件常见事情是确保根据ElapsedGameTime更新每个实体。即使在可变帧速率下,这也允许平滑移动。

我正在使用FlashDevelop在AS3中寻找该功能。

到目前为止,我已经想出了:

public function Update():void
{
    var currentTime:Number = getTimer();
    var elapsedTime:Number = currentTime - lastFrame;
    elapsedTime /= 1000;
    //use elapsedTime here for movement
    player.x += speed.x * elapsedTime
    lastFrame = getTimer();
}

使用它,我无法真正判断它是否真的有效。当我实现这一点时,我真的看不出有什么区别。

这相似吗?有没有其他方法可以做到这一点?

Actionscript 3 equivalent to XNA ElapsedGameTime

如果是这样的话,您似乎可能会看到使用它与使用 enter_frame 处理程序没有区别,这可能是真的,给定帧所需的所有处理都在分配的时间内发生,并且它实际上能够在 1/24 秒(默认帧速率为 24)平稳更新。 测试差异的一种方法是修改 frameRate 属性,并查看"字符"的速度是否受到 frameRate 变化的影响。 您还可以使用像trace(elapsedTime)这样的跟踪语句,您还可以添加一个enter_frame事件处理程序并跟踪帧并跟踪它,以便更好地了解它的性能以及它会产生什么差异。 这似乎是一种完全有效的方法,尽管我没有做过很多Flash游戏编程,但在Flash RIA开发方面有很多经验,我认为这种方法没有任何问题。

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/core/Application.html#frameRate

如果使用纯 AS3,则可以使用主类上的元数据进行设置,例如:

http://flassari.is/2009/02/swf-metadata-in-pure-as3-projects/

http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf680e1-7ffe.html#WS4b4ddee4904fe7796d38fa291219d46bcb4-8000

您可以尝试使用 Timer 类而不是 ENTER_FRAME

var myTimer:Timer = new Timer(1000, 1); // (ms, repeats = set to 0 for infinity)
myTimer.addEventListener(TimerEvent.TIMER, runOnce);
myTimer.start();
function runOnce(event:TimerEvent):void {
    trace("runOnce() called @ " + getTimer() + " ms");
}

var myTimer:Timer = new Timer(1000); // (ms)
myTimer.addEventListener(TimerEvent.TIMER, runMany);
myTimer.start();
function runMany(event:TimerEvent):void {
    trace("runMany() called @ " + getTimer() + " ms");
}