繁体   English   中英

Processing.js计时器

[英]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

演示位于http://jsfiddle.net/gaby/CF4Ju/

我为游戏补习了这一堂课。 它使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM