Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Processing.js计时器_Javascript_Timer_Processing.js - Fatal编程技术网

Javascript Processing.js计时器

Javascript Processing.js计时器,javascript,timer,processing.js,Javascript,Timer,Processing.js,我正在使用Processing.js开发一个应用程序 在绘图循环中的每一步,我都将帧数增加一个frame++ 我想知道有多少时间过去了。目前,为了获得经过的时间(知道我的应用程序设置为以60FPS运行),我喜欢这样做:time=frame/60。但这只有在应用程序始终以精确的FPS运行时才有效,我们都知道情况并非如此,因为它取决于用户的硬件 我希望计时器非常准确(只有0.0001秒的误差) 建议一些javascript算法来计算now()和start_time()之间的差异也很受欢迎。您可以将开

我正在使用Processing.js开发一个应用程序

在绘图循环中的每一步,我都将帧数增加一个
frame++

我想知道有多少时间过去了。目前,为了获得经过的时间(知道我的应用程序设置为以60FPS运行),我喜欢这样做:
time=frame/60
。但这只有在应用程序始终以精确的FPS运行时才有效,我们都知道情况并非如此,因为它取决于用户的硬件

我希望计时器非常准确(只有0.0001秒的误差)


建议一些javascript算法来计算now()和start_time()之间的差异也很受欢迎。

您可以将开始时间存储在一个变量中

然后根据需要创建一个新计时器,并从中减去开始时间变量。。 结果将是以毫秒为单位的差值

您还可以使用实际时间除以帧计数器来获得应用程序的准确平均帧速率

差不多

var startTimer = new Date(); // at start (once)
只要你想查一下

var passed = new Date() - startTimer; // in milliseconds

演示在

如果您想要准确,请查看。但是,并非所有浏览器都提供此功能


此外,Processing.js还有一个名为frameCount的内置只读变量。你可以查询它,而不是自己计算帧。

我为一个游戏编了这个类。它使用
millis()
,并且独立于
帧速率

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;
  }
}
类计时器{
布尔增量,inProgress;
int繁殖,结束;
整数秒,tm_限制;
计时器(int tm_限制){
此.tm_极限=tm_极限;
秒=tm_极限;
增量=假;
inProgress=假;
}
计时器(){
秒=0;
增量=真;
inProgress=假;
}
void start(){
inProgress=true;
spawn=millis();
}
无效停止(){
inProgress=假;
结束=毫秒();
}
int getSeconds(){
如果(正在进行){
如果(增量){
秒=整数((毫秒()-spawn)/1000);
}
否则{
if(秒-int((毫秒()-spawn)/1000)!=秒){
秒=秒-整数((毫秒()-spawn)/1000);
如果(秒)