Java:游戏中未检测到KeyListener
对于我的任务,我必须在游戏中为角色添加移动。其工作方式很简单:如果他们按左键,他们会将方向更改为左;如果他们按右键,他们会将方向更改为右(角色总是在移动) 其工作方式是每隔半秒左右,游戏会调用一个Java:游戏中未检测到KeyListener,java,keylistener,Java,Keylistener,对于我的任务,我必须在游戏中为角色添加移动。其工作方式很简单:如果他们按左键,他们会将方向更改为左;如果他们按右键,他们会将方向更改为右(角色总是在移动) 其工作方式是每隔半秒左右,游戏会调用一个update()方法,在该方法中重新绘制等。然后,游戏会通过调用角色上的updateMoveDirection()来询问角色是否要向新的方向移动 我已经测试过了,这个方法肯定会像预期的那样被定期调用。但是,当我添加一个KeyListener来查找左键和右键单击时,这些都不会被检测到。我想这和全班的注意力
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
}
};
}
我不确定你的游戏是如何设置的。通常,将一个KeyListener附加到JFrame、JWindow、JComponent或Canvas(或者更一般地说是用于绘制的Swing类)就足够了。上面的代码看起来像是您将尝试为每个要对输入作出反应的游戏对象添加一个KeyListener。技术上可能,但不是besr方法 但是,您的问题更可能是另一个问题。请注意,由于某些原因,Java在一次检测多个按下的键时可能会遇到问题。此外,只要按下键,就会经常调用keypressed 我建议:
或者,您可以将布尔值放在InputController中,并赋予字符对其的访问权限。然后,它更准确地符合“更新读取输入”的要求您在哪里调用
addKeyListener()
?@NathanielJones我在哪里可以调用它,因为我没有将它添加到GUI组件(如框架等)?感谢@monty的输入,但在项目描述中,它说updateMovement方法:“读取键盘输入,并根据需要更改蛇的方向。”。在我看来,它应该在这个方法中处理,而不是在一个外部类中处理?此外,游戏的Swing组件在一个单独的jar文件中在外部处理,因此我不能直接更改它们。@monty使用一个类而不是将它放在方法中是正确的。此外,即使你不编辑Swing组件s直接访问它们,然后从类中调用,例如,myWindow.addKeyListener();
。@NathanielJones刚刚注意到你可以这样做。感谢大家的帮助!@monty ah刚刚注意到你可以从外部库中添加它!感谢帮助!Awarded@John如果你(不得不)使用外部库在原始问题中提到这一点是明智的。它们很可能已经涵盖了输入处理,并且可能提供了其他读取输入的方法(这可能是您的老师希望看到的方式)。这个答案是为Java游戏从头开始的场景量身定制的。