【发布时间】:2016-12-09 19:10:25
【问题描述】:
我最近做了一个坦克游戏,但我遇到了一个严重的问题。对于键盘输入,我使用了 KeyListener,但在播放过程中,突然,KeyListener 没有响应。钥匙刚刚停止工作。我在互联网上寻找这个问题,我发现很多答案说我应该使用 KeyBinding。我这样做了,但问题又出现了。我该怎么办?
这只是 KeyBinding 的一小段代码。
public Action redTankBackwardReleased = new AbstractAction("action") {
private static final long serialVersionUID = 1L;
public void actionPerformed(ActionEvent e) {
Game.redTank.xSpeed = 0;
Game.redTank.ySpeed = 0;
}
};
panel.getInputMap().put(KeyStroke.getKeyStroke("released DOWN"), "8");
panel.getActionMap().put("8", redTankBackwardReleased);
一切正常,但几秒钟或一分钟后,按键停止响应......我不明白。
【问题讨论】:
-
如果这是一个 Swing GUI,那么键绑定应该工作,如果他们不工作,那么你的代码中一定有一个错误,我们是不知情。如果您在此处或任何站点上需要帮助解决此问题,您将需要发布相关代码。最好不要发布整个程序或小型 sn-ps,而是发布一个非常小的可编译和可运行的程序来演示您的问题,minimal reproducible example。
-
没有代码我们无能为力。我能给出的最佳建议是:一个组件只有在获得焦点时才会收到
KeyEvents,所以只需使用FocusListener来确定它何时失去焦点。除此之外,没有代码我们也无能为力。 -
@Paul:如果他使用 Key Bindings,那么焦点应该不是问题如果他使用了正确的 InputMap,但同样,我们没有他的代码,不知道他使用的是哪个 InputMap。
-
@HovercraftFullOfEels 好吧,这个建议是关于
KeyListener-part 的(应该说清楚)。但最终这整件事如果没有任何代码就毫无意义。 -
我马上把代码贴在这里。
标签: java swing keylistener