希望这个问题不会让我的屁股发火。 我正在制作一个拼图益智游戏,我得到了所有基本代码。现在,为了使它更“专业”,我想实现一个功能来洗牌所有牌。 至于改组算法,我已做好充分准备,我已经准备好了,但是,为了让它更加令人愉悦,我想让脚本停止几毫秒之后每次成功的卡片交换,显示拼图的instad在点击按钮后已经全部洗牌,这就是现在正在发生的事情(即使我已经尝试使用“setTimeout”功能)。
我的脚本如下,希望有人可以帮我解决这个问题:
function shuffleCards() {
var temp;
for ( var i=0 ; i<50 ; i++) {
setTimeout(function(){
temp = Math.floor((Math.random() * 3) + 1);
if (temp === 1)
move( "t1" );
else if (temp === 2)
move( "t2" );
else if (temp === 3)
move( "t3" );
} , 500);
}
}
(仅供参考:draw()函数在move()函数结束时调用)
答案 0 :(得分:1)
你的setTimeout
内部for循环将执行所有操作,延迟时间为500毫秒
请尝试setInteval
而不是setTimeout
。
function shuffleCards() {
var temp;
var i=0;
var shuffle = setInterval(function () {
if (i < 50) {
i++;
temp = Math.floor((Math.random() * 3) + 1);
if (temp === 1)
move("t1");
else if (temp === 2)
move("t2");
else if (temp === 3)
move("t3");
} else {
clearInterval(shuffle);
}
}, 500);
}
答案 1 :(得分:0)
如果您还希望延迟刷卡后的操作,可以使用递归方法并在最后使用回调:
function shuffleCardsWait( i, ms, limit, cb ) {
var temp = Math.floor((Math.random() * 3) + 1);
if (temp === 1)
move( "t1" );
else if (temp === 2)
move( "t2" );
else if (temp === 3)
move( "t3" );
if ( i < limit ) {
setTimeout( function( ) {
i++;
shuffleCardsWait( i, ms, limit, cb );
}, ms );
} else {
if ( cb ) cb( );
}
}