1

假设我有一个这样的游戏循环

function update(){

myTime = Date.now() - myTime

// use myTime as you wish...


// reset myTime
myTime = Date.now()  

}

事情发生在那里,理想情况下是 60fps,但并非总是如此。使用 Date.now() 我需要知道一帧和另一帧之间发生了多少毫秒。原因如下:

我有一个变量X,这个变量应该线性增加,以便每 1 秒增加 480 个单位。这种增加应该尽可能平滑,所以我认为它应该是每毫秒 0,48。

考虑到我每 16.6 毫秒 (60fps) 只在屏幕上绘制一次,我该怎么做?我需要通过添加 0,48 * 16,6 来补偿吗?或者......什么样的论坛?我对此感到疯狂,在此先感谢!

4

1 回答 1

0

我不确定我是否得到了这个问题,但也许这会有所帮助?

要获取自上次运行函数以来的时间,您可以执行以下操作:

var lastTime = Date.now();

function update(){

    //do stuff here

    var myTime = Date.now(),
        timePassed = myTime - lastTime; //time passed since last time
    lastTime = Date.now(); //set for next time
}

要查看函数每秒运行多少次,您可以执行以下操作:

var lastTime = Date.now(), framerate=1;

function update(){

    //do stuff

    framerate++;
    if ((Date.now()-1000)>lastTime) { //if a second or more has passed
        console.log(framerate); //log number of times function has ran
        framerate=0;  //and reset values
        lastTime = Date.now();
    }
}

要加入这些功能,请执行以下操作:

var lastTimeEach = Date.now(), lastTimeSecond = Date.now(), framerate=1, x=480;

function update(){

    //do game logic

    var myTime = Date.now(), //time now
        timePassed = myTime - lastTimeEach; //time passed since last iteration
    lastTimeEach = Date.now(); //reset for next iteration

    framerate++;
    if ((myTime-1000)>lastTimeSecond) { //one second has passed
        x += 480; //add 480 to x
        framerate=0; //reset framerate
        lastTimeSecond = Date.now(); //reset for next second
    }
}​

这是一个演示

于 2012-05-27T21:04:21.100 回答