【问题标题】:KeyListener not listening when I change a boolean当我更改布尔值时 KeyListener 不听
【发布时间】:2011-09-07 20:42:01
【问题描述】:

好的,我正在制作一个小型乒乓球游戏,并且,我正在为它制作一个开始菜单。就像,你启动游戏,得到一个菜单,你点击播放,然后游戏开始,现在,一切都按照我的意愿运行,除了一件事。当我单击按钮时,一切都被绘制出来,球开始移动,一切都正确更新,但是,我不能再移动我的球员了。就像 KeyListener 停止工作一样,我的程序突然停止对键做出反应。我会给你们我所有的游戏源代码,因为,我很困惑,我不知道是什么原因造成的,也不知道如何修复它。我的菜单通过在按下按钮时更改布尔值来工作,当布尔值为假时,绘制开始菜单,当它为真时,绘制游戏。 对了,代码很多,我上传到pastebin吧。

PongWindow.java(包括主)http://pastebin.com/S5CpWW5Q

PongDrawing.java(包括绘图、移动、按键监听器、主游戏循环等等)http://pastebin.com/x2LxkkbP

PongPlayer.java(玩家)http://pastebin.com/N8VWTL0P

PongBall.java(球)http://pastebin.com/temGc2Yg

如果你们能弄清楚为什么它不再听我的钥匙了,请告诉我,我不知道。

【问题讨论】:

  • 很少有人会仔细检查您的所有代码以找出问题所在。继续简化事情,直到你得到一个简短的、独立的、正确的(可编译的)示例(SSCCE)(sscce.org)来证明问题。
  • @I82Much:如果我设置赏金呢?
  • 然后设置赏金...?然后我会考虑通读该代码。
  • 等等,什么,设置赏金按钮在哪里。
  • System.out.println(key); 放入你的KeyPressed() 并告诉这里你得到了什么,你不会得到任何错误吗?

标签: java keylistener


【解决方案1】:

好像 KeyListener 停止工作了,

键事件仅传递给具有焦点的组件。如果您单击一个按钮,那么您的游戏面板将不再具有焦点。你需要使用类似的东西:

gamePanel.requestFocusInWindow();

在您的 ActionListener 代码中。

不过,正确的做法是忘记使用 KeyListener,而是使用 Key Bindings

【讨论】:

  • 好吧,requestFocusInWindow();没用。而且我从未使用过 Key Bindings,但我会看看它。
猜你喜欢
  • 2012-03-17
  • 2013-08-12
  • 2016-07-11
  • 2016-02-29
  • 1970-01-01
  • 2014-01-06
  • 2018-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多