2014-01-24 88 views
0

我正在製作一個Java遊戲,每當我啓動它時,沒有任何按鍵可以工作,直到按下回車鍵。這是關鍵的輸入代碼:按鍵輸入在按下輸入前不起作用

if(KeyInput.currentKey(KeyInput.W)) player.setUp(); 
if(KeyInput.currentKey(KeyInput.A)) player.setLeft(); 
if(KeyInput.currentKey(KeyInput.S)) player.setDown(); 
if(KeyInput.currentKey(KeyInput.D)) player.setRight(); 
if(KeyInput.currentKey(KeyInput.UP)) player.setDirection(0); 
if(KeyInput.currentKey(KeyInput.RIGHT)) player.setDirection(1); 
if(KeyInput.currentKey(KeyInput.DOWN)) player.setDirection(2); 
if(KeyInput.currentKey(KeyInput.LEFT)) player.setDirection(3); 
if(KeyInput.currentKey(KeyInput.ENTER)) player.setPunching(); 

我有一個類叫做KeyInputcurrentKey只檢查是否有被按下的鍵,如果有,它會檢查是否在參數的關鍵是電流的方法一。下面是代碼:

public class KeyInput { 

public static final int NUM_KEYS = 11; 

public static boolean keyState[] = new boolean[NUM_KEYS]; 
public static boolean prevKeyState[] = new boolean[NUM_KEYS]; 

public static int W = 0; 
public static int A = 1; 
public static int S = 2; 
public static int D = 3; 
public static int ENTER = 4; 
public static int UP = 5; 
public static int LEFT = 6; 
public static int DOWN = 7; 
public static int RIGHT = 8; 
public static int ESCAPE = 9; 
public static int SHIFT = 10; 

public static void setKey(int i, boolean b) { 
    if(i == KeyEvent.VK_W) keyState[W] = b; 
    else if(i == KeyEvent.VK_A) keyState[A] = b; 
    else if(i == KeyEvent.VK_S) keyState[S] = b; 
    else if(i == KeyEvent.VK_D) keyState[D] = b; 
    else if(i == KeyEvent.VK_ENTER) keyState[ENTER] = b; 
    else if(i == KeyEvent.VK_UP) keyState[UP] = b; 
    else if(i == KeyEvent.VK_LEFT) keyState[LEFT] = b; 
    else if(i == KeyEvent.VK_DOWN) keyState[DOWN] = b; 
    else if(i == KeyEvent.VK_RIGHT) keyState[RIGHT] = b; 
    else if(i == KeyEvent.VK_ESCAPE) keyState[ESCAPE] = b; 
    else if(i == KeyEvent.VK_SHIFT) keyState[SHIFT] = b; 
} 

public static void update() { 
    for(int i = 0; i < NUM_KEYS; i++) { 
     prevKeyState[i] = keyState[i]; 
    } 
} 

public static boolean currentKey(int i) { 
    return keyState[i]; 
} 

} 

setKey方法是所謂的主類:

public void keyTyped(KeyEvent key) {} 
public void keyPressed(KeyEvent key) { 
    KeyInput.setKey(key.getKeyCode(), true); 
} 
public void keyReleased(KeyEvent key) { 
    KeyInput.setKey(key.getKeyCode(), false); 
} 

我不知道爲什麼發生這種情況,我不知道,如果你們將能幫助我不知道我的遊戲編程方式。提前致謝! :)

+0

您還沒有顯示的代碼最有趣的部分。這就像「Doc,兩年前我的狗的照片,但他現在病了,你能告訴他有什麼問題嗎?」 – Amadan

+0

你是怎麼做的輸入?這是一個GUI程序嗎?還是你想輸入命令提示符窗口或Unix shell?你在運行什麼操作系統? – ajb

+0

那麼KeyInput是什麼樣的? –

回答

0

恕我直言,你的代碼不包含足夠的信息來解決問題。

檢查您正在初始化KeyListener的點/對象。也許它被稱爲Enter-Key相關操作的第一次?

編輯:你應該添加一個keyListener到你的面板。你不能像正常類一樣處理Listener,它們是一種稱爲Interface的特殊類,它就像一個普通類的擴展。將KeyListener界面添加到您的遊戲面板,它會觀察面板上的鍵盤相關操作。

,你可以在這裏找到遊戲相關的例子: http://www.edu4java.com/en/game/game4.html

它應該是這個樣子:

JPanel gamePanel = new JPanel(); 
gamePanel.addKeyListener(new KeyListener(){ 

    @Override 
    public void keyPressed(KeyEvent arg0) { 
     if(arg0.getExtendedKeyCode() == KeyEvent.VK_ENTER) player.setPunching(); 
     //and so on 
    } 

    @Override 
    public void keyReleased(KeyEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void keyTyped(KeyEvent arg0) { 

    } 

}); 
+0

我不認爲人們能夠解決它...哦,我會仔細看看它自己。不管怎麼說,還是要謝謝你! :) – sparklyllama