我试图使用开发控制台每5秒给马里奥一个蘑菇(在浏览器游戏超级马里奥html5)
我可以手动给马里奥蘑菇输入marioShroons(马里奥),但我想让它在循环,所以我不需要暂停游戏,每次我想要蘑菇。我已经尝试了一个while循环,并设置了超时,但我无法理解它。我唯一熟悉的编码语言是c++和html。**
while(data.time.amount > 0) {
killOtherCharacters()
}
setTimeout(function() {
killOtherCharacters()
}, 1000);我期望这些代码行不会给我一个蘑菇,而是自动杀死敌人。但是在第一次尝试( while循环)中,它冻结了选项卡,我不得不重新加载页面。
设置超时后,它没有产生任何明显的结果,它只杀死了所有接近的字符一次,然后停止。
发布于 2018-12-27 08:34:40
您尝试使用setTimeout,它只工作了一次。这是意料之中的,因为:
Window.setTimeout()设置一个计时器,它在计时器过期后执行函数或指定的代码。
来自MDN
您需要做的是使用setInterval
setInterval()method...repeatedly调用函数或执行代码段,每次调用之间有固定的时间延迟。
来自MDN
因此,在您的控制台中,您应该这样写:
setInterval(killOtherCharacters, 1000);(我删除了匿名函数,因为它并不需要-只有在传递参数或执行多件事情时才需要匿名函数。但是,您确实需要为此删除() )。
如果要停止函数的执行,请将变量赋值到间隔:
var killCharacters = setInterval(killOtherCharacters, 1000);然后对该变量调用clearInterval以清除间隔(停止循环):
clearInterval(killCharacters);发布于 2018-12-27 08:15:49
thing循环冻结页面的原因是Javascript一次只能做一件事,并且告诉它始终运行自己的while函数,阻止所有其他Javascript在您的站点上运行。
setTimeout只在设定时间(见文件)之后运行一次,如果您想每隔x毫秒运行一次,最好是使用setInterval代替。
var intervalID = window.setInterval(killOtherCharacters(), 500); //run this every 500 ms发布于 2018-12-27 08:17:14
如果希望重复调用setInterval (),请使用killOtherCharacters。
const interval = setInterval(function() {killOtherCharacters() },1000);然后,当您希望停止调用该函数时:
clearInterval(interval);https://stackoverflow.com/questions/53941749
复制相似问题