gpt4 book ai didi

java - Key Listener 继续关注 Java 游戏

转载 作者:行者123 更新时间:2023-11-30 04:36:17 24 4
gpt4 key购买 nike

我正在从事 Java 游戏开发,我遇到的一个问题是实现击键。我的代码正确实现了 KeyListener,但是一旦我单击游戏窗口或其外部,KeyListener 就会停止工作。

我确信这是一个焦点问题,因为我可以最小化窗口并将其恢复,并且 KeyListener 将再次工作。

我的设置是一个 JFrame,其中包含一个用于绘图的 Canvas 对象。我有一个添加到 JFrame 的常规 KeyListener。

所以,我猜,当我点击游戏时, Canvas 会获得焦点?但它不应该,因为我将 isFocasable() 设置为 false。

这是我正在使用的一些代码,以免造成任何混淆:

在这里,我创建屏幕和 Canvas

public final void initScreen(DisplayMode dm, boolean fs, boolean vs)
{
screen = new EScreen (dm, fs, vs);
canvas = new EGameCanvas (screen);
canvas.setFocusable (false);
screen.add(canvas);

keyMapManager = KeyMapManager.getInstance (this);

if (fs) {
screen.setFullScreen ();
}
else {
screen.setWindowed ();
}
}

这是我添加 KeyListener 的位置(请注意,KeyMap 实现了 KeyListener,仅此而已)

public boolean setActiveKeyMap(String newKeyMap)
{
if (keyMaps.containsKey(newKeyMap)) {
screen.removeKeyListener (activeKeyMap);
activeKeyMap = keyMaps.get (newKeyMap);
screen.addKeyListener (keyMaps.get (newKeyMap));

return true;
}
return false;
}

这是我的 keyPressed 事件,它只是更改了一个变量

public void keyPressed(KeyEvent ev) {
if (ev.getKeyCode() == KeyEvent.VK_ESCAPE)
game.setIsRunning (false);
}

请注意,所有这些代码都可以正常工作。也就是说,直到我点击游戏窗口。我没有在任何地方实现任何 MouseListeners。另外,我确实实现了这段代码:

screen.setFocusTraversalKeysEnabled (false);

最后,如您所见,我的游戏可以处理全屏模式和窗口模式。两者都会出现此问题。

最佳答案

我的游戏有相同的配置:将 keyListener 添加到 Canvas 而不是 JFrame

如果您仍然希望 JFrame 发送事件,您还可以将其添加到 JFrame 和 Canvas (相同的 keyListener)

canvas.addKeyListener(this);

*this:假设您的对象实现了 KeyListener 接口(interface)

关于java - Key Listener 继续关注 Java 游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13434311/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com