卡片洗牌脚本中的“setTimeout”

时间:2014-06-30 10:35:45

标签: javascript settimeout puzzle

希望这个问题不会让我的屁股发火。 我正在制作一个拼图益智游戏,我得到了所有基本代码。现在,为了使它更“专业”,我想实现一个功能来洗牌所有牌。 至于改组算法,我已做好充分准备,我已经准备好了,但是,为了让它更加令人愉悦,我想让脚本停止几毫秒之后每次成功的卡片交换,显示拼图的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()函数结束时调用)

2 个答案:

答案 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( );
  }
}