让我假设我有一个像这样的游戏循环
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来补偿?或者......什么样的论坛?我对此感到疯狂,提前谢谢!
答案 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
}
}