动画不会按顺序播放,但会同时播放
Animations won't play in order, but all at once
我正在制作西蒙风格的游戏,我可以让动画播放图案中的最后一种颜色,但它不会播放整个图案。我尝试了几种不同的方法:
function nextTurn() {
patternComputer.push(getNextColor());
for (i = 0; i < patternComputer.length; i++) {
setTimeout(function() {
animateColor(patternComputer[i]);
playSound(patternComputer[i]);
}, 500);
}
patternPlayer.length = 0;
}
这个通过 for 循环运行,但在时间过去之前根本不进入 setTimeout 函数,但到那时,i
是不正确的。我也尝试过将它完全从 setTimeout 中取出,但这当然会让每个动画和声音同时播放。我怎样才能让它动画并播放 patternComputer[0] 的声音,然后等待半秒钟,然后播放 patternComputer[1],然后等待半秒钟,然后播放 patternComputer[2]...等等。我不知道如何暂停代码并让它在每次迭代中缓慢循环。这可能吗?我应该找到不同的解决方案吗?谢谢! :)
请注意 javascript 运行s 在单线程中使用 Event Loop.
这里的问题是您正在注册 n 个超时,这些超时将在主线程注册后 运行 500 毫秒。一旦这 500 毫秒过去,它们都会 运行 几乎同时。
为了修复您的代码并使它们 运行 间隔 500 毫秒,您需要从 setTimeout 回调您的代码。另一个更简单的解决方案(但不理想)是这样的:
for (i = 0; i < patternComputer.length; i++) {
setTimeout(function() {
animateColor(patternComputer[i]);
playSound(patternComputer[i]);
}, 500 * (i+1));
}
我正在制作西蒙风格的游戏,我可以让动画播放图案中的最后一种颜色,但它不会播放整个图案。我尝试了几种不同的方法:
function nextTurn() {
patternComputer.push(getNextColor());
for (i = 0; i < patternComputer.length; i++) {
setTimeout(function() {
animateColor(patternComputer[i]);
playSound(patternComputer[i]);
}, 500);
}
patternPlayer.length = 0;
}
这个通过 for 循环运行,但在时间过去之前根本不进入 setTimeout 函数,但到那时,i
是不正确的。我也尝试过将它完全从 setTimeout 中取出,但这当然会让每个动画和声音同时播放。我怎样才能让它动画并播放 patternComputer[0] 的声音,然后等待半秒钟,然后播放 patternComputer[1],然后等待半秒钟,然后播放 patternComputer[2]...等等。我不知道如何暂停代码并让它在每次迭代中缓慢循环。这可能吗?我应该找到不同的解决方案吗?谢谢! :)
请注意 javascript 运行s 在单线程中使用 Event Loop.
这里的问题是您正在注册 n 个超时,这些超时将在主线程注册后 运行 500 毫秒。一旦这 500 毫秒过去,它们都会 运行 几乎同时。
为了修复您的代码并使它们 运行 间隔 500 毫秒,您需要从 setTimeout 回调您的代码。另一个更简单的解决方案(但不理想)是这样的:
for (i = 0; i < patternComputer.length; i++) {
setTimeout(function() {
animateColor(patternComputer[i]);
playSound(patternComputer[i]);
}, 500 * (i+1));
}