2014-02-28 78 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

要定义特定的键特殊反应,使用键绑定 而不是一个关键监听。