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

Javascript - measuring FPS and sync it with events

本文关键字:事件 同步 测量 FPS Javascript      更新时间:2023-09-26

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

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

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

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

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
    }
}​

这是一个演示