2014-02-28 132 views
1

我正在開發一款遊戲,而且前段時間我在java中進行了編程,所以我忘記了一些東西,比如如何創建一個KeyListener,以便讀取java文檔,並提出了這個問題但是當我按下其中一個鍵時,球員不會移動。KeyListener不工作

以下是我的代碼。

這是Player.java類(Player.java延伸Entity.java):

(速度= 1)

public void keyPressed(KeyEvent e){ 
     if(e.getKeyChar() == 'W' | e.getKeyChar() == 'w' | e.getKeyCode() == KeyEvent.VK_UP){ 
      yPos = -speed; 
     } 
     if(e.getKeyChar() == 'S' | e.getKeyChar() == 's' | e.getKeyCode() == KeyEvent.VK_DOWN){ 
      yPos = speed; 
     } 
     if(e.getKeyChar() == 'A' | e.getKeyChar() == 'a' | e.getKeyCode() == KeyEvent.VK_LEFT){ 
      xPos = -speed; 
     } 
     if(e.getKeyChar() == 'D' | e.getKeyChar() == 'd' | e.getKeyCode() == KeyEvent.VK_RIGHT){ 
      xPos = speed; 
     } 
    } 

    public void keyReleased(KeyEvent e){ 
     if(e.getKeyChar() == 'W' | e.getKeyChar() == 'w' | e.getKeyCode() == KeyEvent.VK_UP){ 
      yPos = 0; 
     } 
     if(e.getKeyChar() == 'S' | e.getKeyChar() == 's' | e.getKeyCode() == KeyEvent.VK_DOWN){ 
      yPos = 0; 
     } 
     if(e.getKeyChar() == 'A' | e.getKeyChar() == 'a' | e.getKeyCode() == KeyEvent.VK_RIGHT){ 
      xPos = 0; 
     } 
     if(e.getKeyChar() == 'D' | e.getKeyChar() == 'd' | e.getKeyCode() == KeyEvent.VK_LEFT){ 
      xPos = 0; 
     } 
    } 

這是Entity.java類:

public void move(){ 
     x += xPos; 
     y += yPos; 
    } 

這是在Entities.java等級:

KeyAdapter playerAdapter = new KeyAdapter(){ 
     @Override 
     public void keyPressed(KeyEvent e){ 
      player.keyPressed(e); 
     } 
     @Override 
     public void keyReleased(KeyEvent e){ 
      player.keyReleased(e); 
     } 
    }; 

    public void move(){ 
     //Player 
     player.move(); 
    } 

,這是在Level.java類(Level.java擴展JComponent的):

在級別()方法:addKeyListener(entities.playerAdapter);

在的paintComponent(圖形克)方法:

if(entities.player.getState()) 
g2d.drawImage(entities.player.getImage(), entities.player.getX(), entities.player.getY(), this); 

和int run()方法:entities.move();

那麼,我在做什麼錯了?

+0

什麼是'getState()'? –

+0

@ PM77-1檢查玩家是否存活 –

+0

它在測試中返回「true」嗎? –

回答

1

請注意從docs for getKeyChar()如下:

KEY_PRESSED和KEY_RELEASED事件不用於 字符輸入的報告。因此,此方法返回的值爲 保證僅對KEY_TYPED事件有意義。

你的目的the official tutorial建議使用key bindings

要定義特定的鍵特殊反應,使用鍵綁定 而不是一個關鍵監聽。