我正在尝试使用开发控制台每5秒给马里奥一个蘑菇(在浏览器游戏中,超级马里奥html5)
我可以通过键入marioShroons(mario)手动给马里奥蘑菇加油,但是我想让它循环播放,所以我不必每次都想要蘑菇就暂停游戏。我尝试了一个while循环并设置了超时时间,但是我无法弄清楚。我唯一熟悉的编码语言是c ++和html。 **
while(data.time.amount > 0) {
killOtherCharacters()
}
setTimeout(function() {
killOtherCharacters()
}, 1000);
我希望这些代码行不会给我带来麻烦,而是会自动杀死敌人。但是在第一次尝试(while循环)时,它冻结了选项卡,我不得不重新加载页面。
在设置超时的情况下,它没有产生任何明显的结果,它杀死了所有附近的字符,然后停止了。
答案 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);