【发布时间】:2016-10-01 09:09:59
【问题描述】:
我正在尝试制作一款 Simon Says 游戏。我有一个遍历数字数组的函数。每个数字都与一个动作相关联(因此相应的按钮动画)。当序列只有 1 个值长时,这很好用,但它们都只是一次播放。我已经查找了在迭代之间延迟的方法,但没有发现包含 if/else 语句的 for 循环。
我尝试了一个我找到的解决方案here:
function show_sequence() {
var k = right_seq.length;
//assign each button a number
//when the loop goes over it that button's animation plays
(function animation(i) {
setTimeout(function() {
if (i == 1) {
setTimeout(function() {
TweenMax.from("#pink", 0.6, {opacity:0.3, scale:0.8, ease:Elastic.easeOut});
one.play();
}, 1000);
} else if (i == 2) {
setTimeout(function() {
TweenMax.from("#blue", 0.6, {opacity:0.3, scale:0.8, ease:Elastic.easeOut});
two.play();
}, 1000);
} else if (i == 3) {
setTimeout(function() {
TweenMax.from("#yellow", 0.6, {opacity:0.3, scale:0.8, ease:Elastic.easeOut});
three.play();
}, 1000);
} else {
setTimeout(function() {
TweenMax.from("#green", 0.6, {opacity:0.3, scale:0.8, ease:Elastic.easeOut});
four.play();
}, 1000);
}; //end for loop
if (--i) {
animation(i);
}
}, 200);
})(k);
}
它的工作原理是在动画和声音之间添加延迟,但不会以正确的顺序播放它们。例如,如果数组是 [3, 4, 1, 2] 它不会将动画放置在这些按钮上,而是按 [4, 3, 2, 1] 的顺序放置,并且它不会工作超过 4 轮.
这里是fiddle,但游戏还没有结束,所以我不知道它是否有帮助。按绿色小圆圈开始/继续添加回合。
【问题讨论】:
-
更好的方法可能是使用
animate(),它是complete回调。
标签: javascript jquery animation gsap