我正在开发一个游戏,很久以前我用java编程,所以我忘记了一些东西,比如如何装KeyListener,所以我读了java文档,想出了这个,但是当我按下其中一个键的时候,玩家不会移动。
下面是我的代码。
这是在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):
在Level()方法中:addKeyListener(entities.playerAdapter);
在paintComponent(图形g)方法中:
if(entities.player.getState())
g2d.drawImage(entities.player.getImage(), entities.player.getX(), entities.player.getY(), this);和int run()方法:entities.move();
那么,我做错了什么呢?
发布于 2014-03-01 03:47:11
请注意docs for getKeyChar()中的以下内容
KEY_PRESSED和KEY_RELEASED事件不用于报告字符输入。因此,此方法返回的值保证只对KEY_TYPED事件有意义。
出于您的目的,the official tutorial建议使用key bindings:
若要定义对特定键的特殊反应,请使用键绑定而不是键侦听器。
https://stackoverflow.com/questions/22103812
复制相似问题