0

私は を持っていて、for loop経路探索を行っています。できます!ただし、マップをクリックすると、速度が速くなります。内部で何が起こっているかを遅くするにはどうすればよいですかfor loop...ループごとに1秒ですか?

    for (i = 0; i < result.length; ++i) {

        var getCoords = new String(result[i]);
        var finalCoords = getCoords.split(",");
        var finalX = finalCoords[0];
        var finalY = finalCoords[1];

        currX = parseInt(x_block);
        currY = parseInt(y_block);

        moving = true;

        realSpawnX = finalX * 32;
        realSpawnY = finalY * 32;

        context.drawImage(playerImg, realSpawnX, realSpawnY, 32, 32);
    }
4

2 に答える 2

3
function loop(i) {
  ++i;

  your code

  if (i < result.length) {setTimeout("loop("+i+")", 1000); }
}

ある時点でループを開始します。

loop(0);

アップデート:

jsfiddle の例

更新 2:

ヘルパー関数ループを定義する

function loop(i, result_length, payload) {
  if (i < result_length) {
    payload(i);
    ++i;          
    setTimeout(function() {loop(i, result_length, payload);} , 2000);
  }
}

次に、元のループの位置で次のように呼び出します。

         loop(0, result.length, function(i) {
                getCoords = new String(result[i]);
                finalCoords = getCoords.split(",");
                finalX = finalCoords[0];
                finalY = finalCoords[1];

                currX = parseInt(x_block);
                currY = parseInt(y_block);

                moving = true;

                realSpawnX = finalX * 32;
                realSpawnY = finalY * 32;
                context.drawImage(playerImg, realSpawnX, realSpawnY, 32, 32);
                console.log("Step taken...");
          });
于 2012-05-02T23:38:04.610 に答える
1

これを試して:

function funcName(counter, end){
    if(counter < end){
        var getCoords = new String(result[i]);
        var finalCoords = getCoords.split(",");
        var finalX = finalCoords[0];
        var finalY = finalCoords[1];

        currX = parseInt(x_block);
        currY = parseInt(y_block);

        moving = true;

        realSpawnX = finalX * 32;
        realSpawnY = finalY * 32;

        context.drawImage(playerImg, realSpawnX, realSpawnY, 32, 32);

        setTimeout(function(){
            funcName(counter+1, end);
        },1000);
    }
    else{
        movingBlocked=false;
    }
}

//use it like this
movingBlocked = true;
funcName(0, result.length);
while(movingBlocked){
    ;//do nothing
}

ここにそれのフィドルがありますhttp://jsfiddle.net/qcaYh/

更新

グローバル待機とビジー待機を追加して、コードの同期を維持します。これは、移動が完了するのを待っている間に一時停止する効果があります。

//グローバル var movingBlocked = false;

于 2012-05-02T23:48:00.840 に答える