gpt4 book ai didi

java - 如何在没有按钮或文本区域的情况下使用 KeyListener?

转载 作者:行者123 更新时间:2023-12-01 18:34:15 25 4
gpt4 key购买 nike

我正在使用 Java Swing 编写一个游戏程序,希望直接从键盘获取用户对移动的响应,而不是让他们按下按钮。但我发现的所有教程都需要将操作与按钮绑定(bind),然后将操作与按钮关联。

有没有办法让程序只需要按键就可以响应?

最佳答案

您可以使用 AWTEventListener。它们正在捕获任何事件,无论哪个组件最终会接收到它(不需要任何组件监听,我在 JFrame 中使用一个 JLabel 对其进行了测试)。如果绝对有必要使用KeyListener,则需要进行手动转换。
MouseListener 的此类转换示例(应与 KeyListener 类似):

if(event.getID() == MouseEvent.MOUSE_PRESSED) {
listener.mousePressed(mouseEvent);
}



<我>注意:我自己也制作了 Swing Games,虽然它确实有效,但如果您尝试渲染大量内容,并且使图像渲染更有效可能会变得非常复杂,那么您会遇到性能问题。
因此,如果您有一张平铺 map ,仅针对地形创建数十个方形图像,然后在顶部添加多个 npc 和大量子弹,您的游戏可能无法玩。

这是一个小示例,打印按键/鼠标按下时的按键代码以及移动时的鼠标坐标。如果按下ESCAPE,也会退出应用程序:

Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {

@Override
public void eventDispatched(AWTEvent event) {
if(event instanceof KeyEvent){
KeyEvent keyEvent = (KeyEvent) event;
if(keyEvent.getID() == KeyEvent.KEY_PRESSED){
System.out.println("Key pressed: " + keyEvent.getKeyCode());
if(keyEvent.getKeyCode() == KeyEvent.VK_ESCAPE){
System.exit(0);
}
}
}else if(event instanceof MouseEvent){
MouseEvent mouseEvent = (MouseEvent) event;
if(mouseEvent.getID() == MouseEvent.MOUSE_PRESSED){
System.out.println("Mouse pressed: " + mouseEvent.getButton());
}else if(mouseEvent.getID() == MouseEvent.MOUSE_MOVED){
System.out.println("Mouse moved to " + mouseEvent.getXOnScreen() + "/" + mouseEvent.getYOnScreen());
}
}
}
}, AWTEvent.KEY_EVENT_MASK + AWTEvent.MOUSE_EVENT_MASK + AWTEvent.MOUSE_MOTION_EVENT_MASK);

关于java - 如何在没有按钮或文本区域的情况下使用 KeyListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60091682/

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