Javascript - 测量FPS并将其与事件同步

时间:2012-05-27 19:55:30

标签: javascript timer sync

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

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来补偿?或者......什么样的论坛?我对此感到疯狂,提前谢谢!

1 个答案:

答案 0 :(得分: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
    }
}​

这是DEMONSTRATION