对于我的作业,我必须为游戏中的角色添加动作。它的工作方式很简单:如果他们向左按,他们将方向改为左,如果他们按向右,他们会改变到右边(角色总是在移动)。
这种方式的工作方式是每半秒左右游戏调用一个update()
方法重新绘制等等。然后通过调用updateMoveDirection()
询问角色是否想要向新的方向移动在角色上。
我已经测试过了,这种方法肯定会按预期定期调用。但是,当我添加KeyListener
以查找左右点击时,则不会检测到这些。我认为这与班级的重点有关?但是,由于这个类没有图形元素,所以我不确定它如何请求焦点?
public void updateMoveDirection() {
KeyListener k = new KeyListener() {
public void keyPressed(KeyEvent arg0) {
System.out.println("KEY");
if(arg0.equals(KeyEvent.VK_LEFT)){
System.out.println("LEFT");
}
if(arg0.equals(KeyEvent.VK_RIGHT)){
System.out.println("RIGHT");
}
}
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
};
}
答案 0 :(得分:1)
我不确定你的游戏是如何设置的。通常只需要将一个KeyListener连接到JFrame,JWindow,JComponent或Canvas(或者更常见的是用于绘制的Swing类)。上面的代码看起来就像你试图为你想要的每个游戏对象添加一个KeyListener对输入作出反应。技术上可行,但不是besr方法。
但更有可能你的问题是另一个问题。请注意,由于某种原因,Java会同时检测到多个按键会有麻烦。此外,只要按下按键,就会经常调用按键。
我建议:
编辑: 或者,您可以将布尔值放在InputController中,并为角色提供访问权限。然后它更符合“更新读取输入”