我需要帮助在firefox的开发人员控制台中创建循环

时间:2018-12-27 08:10:11

标签: javascript loops

我正在尝试使用开发控制台每5秒给马里奥一个蘑菇(在浏览器游戏中,超级马里奥html5)

我可以通过键入marioShroons(mario)手动给马里奥蘑菇加油,但是我想让它循环播放,所以我不必每次都想要蘑菇就暂停游戏。我尝试了一个while循环并设置了超时时间,但是我无法弄清楚。我唯一熟悉的编码语言是c ++和html。 **

while(data.time.amount > 0) {
  killOtherCharacters()
}

setTimeout(function() {
  killOtherCharacters()
}, 1000);

我希望这些代码行不会给我带来麻烦,而是会自动杀死敌人。但是在第一次尝试(while循环)时,它冻结了选项卡,我不得不重新加载页面。

在设置超时的情况下,它没有产生任何明显的结果,它杀死了所有附近的字符,然后停止了。

3 个答案:

答案 0 :(得分:0)

while循环冻结页面的原因是Javascript一次只能做一件事,并且您告诉它始终运行while函数,从而阻止所有其他Javascript在您的站点上运行。

setTimeout仅在设置的时间(see documentation)之后运行一次,如果您想每隔x​​毫秒运行一次,最好使用use setInterval instead

var intervalID = window.setInterval(killOtherCharacters(), 500); //run this every 500 ms

答案 1 :(得分:0)

如果要重复调用killOtherCharacters(),请使用setInterval。

const interval = setInterval(function() {killOtherCharacters() },1000);

然后,当您希望函数停止被调用时:

clearInterval(interval);

答案 2 :(得分:0)

您尝试使用setTimeout,但只能使用一次。这是可以预期的,因为:

  

Window.setTimeout()设置一个计时器,该计时器在计时器到期时执行功能或指定的代码段

来自MDN

您需要做的是使用setInterval

  

setInterval()方法...重复调用函数或执行代码段,每次调用之间有固定的时间延迟。

来自MDN

因此,在控制台中,您应该这样写:

setInterval(killOtherCharacters, 1000);

(我删除了匿名函数,因为它是不需要的-仅在传递参数或执行多项操作时才需要匿名函数。但是您确实需要为此删除()。) / p>

如果要停止执行该函数,请为该间隔分配一个变量:

var killCharacters = setInterval(killOtherCharacters, 1000);

然后在此变量上调用clearInterval以清除间隔(停止循环):

clearInterval(killCharacters);