pattern.forEach( function(elem, index) {
setTimeout(yo(elem),index*1000);
function yo(elem){
console.log(elem);
switch (elem) {
case 'blue':
// statements_1
$('#blue').css('background-color','grey');
bsound.play();
setTimeout(function(){$('#blue').css('background-color','blue');},500);
break;
case 'green':
// statements_1
$('#green').css('background-color','grey');
gsound.play();
setTimeout(function(){$('#green').css('background-color','green');},500);
break;
case 'red':
// statements_1
$('#red').css('background-color','grey');
bsound.play();
setTimeout(function(){$('#red').css('background-color','red');},500);
break;
case 'yellow':
// statements_1
$('#yellow').css('background-color','grey');
ysound.play();
setTimeout(function(){$('#yellow').css('background-color','yellow');},500);
break;
}
}
});
嘿,伙计们,我正在努力建立一个西蒙游戏。现在随着游戏跟随计算机将生成随机模式。每种颜色都有其特定的声音。现在我在这里使用的逻辑是我们将使用foreach方法循环模式数组。在每个元素,我将调用带有索引* 1000的settimeout回调函数。我将索引与ms相乘,因此每次调用之间都存在差距。现在,如果我有一个说['red']的模式数组,它就可以了。 for ['red','yellow']它将同时播放黄色和红色的两个块声音,并且还会将这些块的颜色更改为灰色并将其更改回原始颜色(问题是它是否同时执行此操作)。如果['red','yellow','red']它会像['red','yellow']那样做(意思是它会跳过红色的声音)。
任何人都可以告诉我为什么会这样。我搜索了stackoverflow,人们建议使用index * ms来获得所需的延迟......