2017-01-09 92 views
0

我有一個Threejs項目,我在其中使用keydown作爲我的玩家角色的控件,在我的動畫函數中:'a'和'd' ,'w'和's'上下。Threejs,Keydown應該移動我的玩家一定的距離,但距離增加

當我按住其中一個按鍵時,在按住按鍵的過程中,我的角色移動的距離會增加。 當我釋放鑰匙並再次按下之後,我的角色現在繼續跳躍增加的距離,並且在某個時候,它只需按一下按鈕就跳過整個屏幕。

下面的代碼片段:

$(document).keydown(function(e){ 
     if (e.keyCode == 87) { 
      player.position.y += 0.05; 


     } 
     if (e.keyCode == 83) { 
      player.position.y -= 0.05; 


     } 
     if (e.keyCode == 65) { 
      player.position.x -= 0.05; 


     } 
     if (e.keyCode == 68) { 
      player.position.x += 0.05; 


     } 
    }); 

會很感激一些幫助:)

+0

無法重現發佈的代碼的問題,但確保代碼執行**只有一次**。如果多次執行,每次按鍵都會調用多個keydown處理程序,結果位置變化超出預期。 – traktor53

+0

您在渲染循環中發佈了哪些代碼?如果是這樣,每次渲染循環觸發它將添加**另一個**監聽器,導致上述評論中解釋的內容。 – 2pha

回答

0

我認爲這是更好地在移動中的邏輯循環渲染這樣

外循環渲染:

$(document).keydown(function(e){ 
    if (e.keyCode == 87) { 
     movementY = +0.05; 
    } 
    if (e.keyCode == 83) { 
     movementY = 0.05; 
    } 
    if (e.keyCode == 65) { 
     movementX = -0.05; 
    } 
    if (e.keyCode == 68) { 
     movementX = 0.05; 
    } 
}); 

$(document).keyup(function(e){ 
    movementX = 0; 
    movementY = 0; 
}); 

內部渲染循環:

player.position.x+=movementX; 
player.position.Y+=movementY;