【问题标题】:Making a time counter in javascript?在javascript中制作时间计数器?
【发布时间】:2015-10-26 07:15:24
【问题描述】:

我正在尝试制作一个简单的游戏,例如:www.aimbooster.com 来测试我的 JavaScript 知识,但我遇到了问题。基本上我想要一个计时器来计算用户的时间,但我不能使用 setInterval 方法,因为程序必须等待一整秒才能发生其他任何事情,这不是我想要的。我想要的是这个计时器进程在后台运行。我认为这通常被称为“线程”。我该怎么办?我想要一些类似的东西:

function startTimer() {
   while (stop == false)  {
       setInterval(function() {time++};1000);
  }
}


function startGame()  {
   startTimer();
   //MY GAME STARTS HERE

}

如果我现在这样做,startTimer 函数将继续运行,我将无法执行任何其他操作。我希望 startTimer 是一个子进程,而主进程是游戏。

【问题讨论】:

  • setTimeoutsetInterval 的标称分辨率为 1 毫秒,但运行速度可能不会那么快。某些版本的 IE 是 15 毫秒左右,其他浏览器可能是 2 或 3 毫秒。这不是线程,javascript 是同步的(大部分)。传递给 setInterval 的函数将以您指定的间隔运行,在其他 javascript 函数之间。它不会在其他 javascript 函数运行时运行。
  • 顺便说一句,网上有很多关于 setTimeoutsetInterval 如何工作的文章。阅读一些,我敢肯定有些不准确,但总的来说你会明白的。

标签: javascript multithreading timer counter


【解决方案1】:
while (stop === false)  {
   setInterval(function() {time++};1000);
}

这是一个无限循环,您正在调用 setInterval 无限时间,eventloop 没有机会将回调弹出到堆栈以增加时间变量。

我想保存定时器变量,并使用 clearInterval 来停止定时器

function Game() {

}

Game.prototype.start = function() {
   this.timer = setInterval(function() {
     // do your stuff
   }, 1000);
   // start game
}

Game.prototype.stop = function() {
   clearInterval(this.timer);
}

【讨论】:

  • 几乎正确。 时间 无限增加,javascript 引擎没有喘息的机会,所以它是一个运行一次的无限循环(没有其他东西可以查看)。
  • 这正是我想要的。我可以在让计数器在后台运行的同时运行我的其他代码。我非常感谢这一点。我真的不明白这个或原型是什么,所以我必须阅读它。但真的再次感谢您的帮助
  • @mre12345,但是这种资源耗尽的 RAM 不会被大量 setInterval 请求淹没吗?
【解决方案2】:

你可以这样做:

function startTimer() {
       setInterval(function() {while (stop == false) time++}, 1000);
}

【讨论】:

  • 这会在后台运行吗?所以就像我不必等待一秒钟来运行我的其他进程一样?抱歉英语不好,这不是我的母语
  • 你如何停止这个计时器?
  • 您可以通过将 stop 变量设置为 true 来停止它。所以这将是用户失败的时候。
  • 由于某种原因,这会创建一个无限循环
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-17
  • 2018-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多