我刚刚完成了一个西蒙说用javascript / jquery编写的游戏。一切都运转正常,除了第二轮后西蒙的播放顺序。会发生什么事情是simon press决定播放的新随机按钮作为播放序列中的第二个按钮,当它应该只是最后一个时(我说只是因为它也在最后播放)。我认为setTimeout和setInterval之间存在差异,但我对它是什么一无所知。关于为什么会发生这种情况的任何想法?这是我的好措施的代码:http://codepen.io/vinnyA3/pen/avvGbM?editors=001
(按开,然后开始游戏)
function playSimonSequence() {
var i = 0;
var myInterval = setInterval(function(){
//send in the correct button name and url to add the button pressed effect
lightsAndSounds(buttonsAndUrls[simonArray[i]].button, buttonsAndUrls[simonArray[i]].url);
++i;
if(i === simonArray.length){clearInterval(myInterval);}
},1500);
//this is running at the wrong time
setTimeout(randomButtonPress, 2210);
}; //end simon sequence
答案 0 :(得分:0)
您有一个1500毫秒的间隔计时器和一个2210毫秒的单个计时器同时运行。您应该看到第一个间隔为1500毫秒,单个计时器为2210毫秒,然后第二个间隔计时器为3000毫秒,依此类推。这就是你的代码指定的方式。
你的计时器都在同一时间运行。
Javascript不等待运行您的setTimeout()
,直到完成所有间隔。相反,两个计时器都会立即安排在未来的时段和一起运行。
如果您希望在清除时间间隔后运行setTimeout()
,请将setTimeout()
放在您致电clearInterval()
的代码块中。