2012-05-02 55 views
0

我有一個for loop,我正在做路徑查找。有用!但是,當我點擊地圖時,它會走向快速。我如何減慢for loop內部發生的事情,以便在每個循環之間說一秒鐘?jQuery重複每秒內循環

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); 
    } 

回答

3
function loop(i) { 
    ++i; 

    your code 

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

在某個時刻開始循環:

loop(0); 

更新:

example on 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..."); 
      }); 
+0

那......沒有幫助。我嘗試了類似的東西。 – nn2

+0

請解釋您的問題與代碼。也許我可以幫忙。 – snies

+0

我做了你所說的話,而且它仍然快速地無法比擬。循環部分。 – nn2

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/

更新

添加全局和繁忙的等待以保持代碼同步。這有等待移動完成時暫停的效果。

// global var movingBlocked = false;

+0

你有一些錯誤的功能和功能拼寫... Anwyay,我試了一下。它沒有工作。沒有循環。 – nn2

+0

修正了拼寫錯誤,並刪除了對頂部框架的引用。 – vdbuilder

+0

不,現在它甚至不會吸引玩家,即使它獲得了正確的X和Y. – nn2