2012-05-10 94 views
1

我已經在y軸上跳躍運行良好,但我希望能夠在按下左/右鍵時從跳躍中使用'dx' (例如,如果按右鍵向右跳,同時按住右鍵跳,同時按住「Shift」鍵)需要一種讓我的角色在移動時左右移動的方法

我的主跳碼(按下跳轉鍵時激活的定時器):

public void actionPerformed (ActionEvent e) { 
    dy += 1; 
     y_pos += dy; 
    if (y_pos >= 400) { 
     dy = 0; 
     y_pos = 400; 
     timer.stop(); 
    } 
    repaint(); 
} 

現在我的KeyEvent代碼:

  if (command == KeyEvent.VK_RIGHT){ 
       x_pos += 5; 
       right = true; 
      } 
      if (command == KeyEvent.VK_LEFT) { 
       x_pos -= 5; 
       right = false; 
      } 
      if (command == KeyEvent.VK_UP) {  
       if (!(timer.isRunning())) 
        dy = -20; 
       timer.start(); 
      } 
      dr.repaint(); 

回答

3

下面是我將如何實現輸入邏輯。請注意,如果您想深入瞭解輸入處理,有幾種選擇。使用這種實現方式,鍵盤輸入與他們在遊戲世界中的效果是分開的,這在幾個方面很方便。例如,無論按鍵/重複的頻率如何,角色的速度都是恆定的(因爲遊戲循環/運動的時間被正確處理)。

無論如何,一些僞代碼:

// Global: 
array keysdown; 
keysdown[left] = false; 
keysdown[right] = false; 
keysdown[up] = false; 

// The all-important game loop: 
while (true) { 
    pollInputs(); 
    doMovement(); 
    draw(); 
} 

function pollInputs() { 
    foreach (key that you want to handle) { 
     if (key.state == down) { 
      keysdown[key] = true; 
     } else { 
      keysdown[key] = false; 
     } 
    } 
} 

function doMovement() { 
    if (keysdown[left]) { 
     // move character left 
    } else if (keysdown[right]) { 
     // move character right 
    } 

    if (keysdown[up]) { 
     // initiate jump 
    } 
} 
+0

請你成爲一個更具體一點?我不太明白(對不起) – Anwar

+0

您將不得不張貼更多的代碼,以便了解您遊戲的架構。例如,最好查看檢查密鑰的整個函數,以及調用它的函數。 – TaZ