Javascript游戏循环以相同的速度运行?

Dav*_*ave 5 javascript loops frame-rate

我有一个javascript游戏,在某些计算机上运行速度非常快,而在其他计算机上运行速度非常慢.我一直在做一些研究,我发现我需要根据时间更新我的循环,但我似乎无法找到任何关于javascript的好例子.有人能指出我如何在任何硬件上以30fps的速度运行游戏吗?

谢谢

Joh*_*ald 7

通常游戏是从Delta Time开始工作的,也就是说,自上一帧渲染以来的时间量.

Psuedocode(大致是C#):

DateTime lastFrameTimeStamp = DateTime.Now;
void Draw()
{
    TimeSpan timeSinceLastFrame = DateTime.Now.Subtract(lastFrameTimeStamp);
    float deltaTime = timeSinceLastFrame.TotalSeconds;

    // Do all of your movement and other time-based math based on the deltaTime, Like:
    float x = x + (MovementPerSecond * deltaTime);


    lastFrameTimeStamp = DateTime.Now;
}
Run Code Online (Sandbox Code Playgroud)

使用增量时间可防止对CPU功率的依赖性或帧的绘制频率.


Sim*_*ris 6

你不能强迫一个游戏在30fps的运行,如果硬件是无法实现这一目标.如果它正在做的事情超过1/30秒,那你就不走运了.

您可以使用requestAnimationFrame让它尽可能快地运行.见这里:http://paulirish.com/2011/requestanimationframe-for-smart-animating/

  • 您还应该查看此链接:http://nokarma.org/2011/02/02/javascript-game-development-the-game-loop/index.html从该文章中,它从游戏开发中接近主题透视. (4认同)

kre*_*eek 0

像 EaselJS 这样的框架通常具有每 x 毫秒运行一次的 Tickers/Timers。

http://easeljs.com/docs/Ticker.html

JavaScript 游戏框架列表:

https://gist.github.com/768272