[英]Processing.js timer
我正在使用Processing.js开发应用程序。
在绘图循环的每一步中,我将帧数增加一frame++
。
我想知道多少时间过去了。 当前,为了获得时间(知道我的应用程序设置为以60FPS运行),我这样做是: time=frame/60
。 但这仅在应用程序始终以完全FPS运行的情况下有效,并且我们都知道并非如此,因为它取决于用户的硬件。
我希望计时器非常准确(只有0.0001s错误)。
也欢迎提出一些JavaScript算法来计算now()和start_time()之间的差异。
如果需要准确性,请查看高分辨率计时器 。 但是,此功能并非在所有浏览器上都可用。
此外,Processing.js具有一个内置的只读变量,名为frameCount。 您可以查询而不是自己计算帧数。
您可以将开始时间存储在变量中。
然后根据需要创建一个新计时器,并从中减去开始时间变量。结果将是毫秒数之间的差。
您还可以使用实际时间除以帧计数器,以获取应用程序的准确平均帧率。
就像是
var startTimer = new Date(); // at start (once)
以及每当您要检查
var passed = new Date() - startTimer; // in milliseconds
我为游戏补习了这一堂课。 它使用millis()
并且独立于frameRate
class Timer{
boolean increment, inProgress;
int spawn, end;
int seconds, tm_limit;
Timer(int tm_limit){
this.tm_limit = tm_limit;
seconds = tm_limit;
increment = false;
inProgress = false;
}
Timer(){
seconds = 0;
increment = true;
inProgress = false;
}
void start(){
inProgress = true;
spawn = millis();
}
void stop(){
inProgress = false;
end = millis();
}
int getSeconds(){
if(inProgress){
if(increment){
seconds = int((millis() - spawn) / 1000);
}
else{
if(seconds - int((millis() - spawn) / 1000) != seconds){
seconds = seconds - int((millis() - spawn) / 1000);
if(seconds <= 0) { stop(); }
else spawn = millis();
}
}
}
return seconds;
}
void reset(){
if(!increment)
seconds = tm_limit;
else
seconds = 0;
inProgress = false;
}
}
如果使用参数实例化Timer对象,则假定Timer应该减少。 否则,可以通过从getSeconds()
方法获取值来检查退出条件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.