gpt4 book ai didi

java - 多按键事件处理

转载 作者:行者123 更新时间:2023-12-01 17:05:57 26 4
gpt4 key购买 nike

我正在尝试用 Java 制作一款游戏(乒乓球)。此时此刻,我仍然停留在独立移动 Racket 上。

总结一下游戏,我有 2 个由同一个键盘控制的对象。按下“a”时,Racket_1 应上升,按下“q”时下降,Racket_2 应按“p”和“m”执行相同操作。当我尝试随机移动 Racket 时,在我看来 keyPressed 和 keyReleased 在某些情况下不会被触发(按下和释放按键的某种顺序)。

这是我的示例代码(我通过打印按下的键来模拟运动):

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class PingPong extends JFrame implements KeyListener {

private JPanel mainPanel = new JPanel();
private boolean isAPressed;
private boolean isQPressed;
private boolean isPPressed;
private boolean isMPressed;

public PingPong() {
this.setSize(400, 100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setContentPane(mainPanel);
this.setFocusable(true);
this.addKeyListener(this);
}

@Override
public void keyPressed(KeyEvent e) {
char key = e.getKeyChar();
switch (key) {
case 'a':
isAPressed = true;
break;
case 'q':
isQPressed = true;
break;
case 'p':
isPPressed = true;
break;
case 'm':
isMPressed = true;
break;
}
System.out.println("a is " + isAPressed + ", q is " + isQPressed
+ ", p is " + isPPressed + ", m is " + isMPressed);
}

@Override
public void keyReleased(KeyEvent e) {
char key = e.getKeyChar();
switch (key) {
case 'a':
isAPressed = false;
break;
case 'q':
isQPressed = false;
break;
case 'p':
isPPressed = false;
break;
case 'm':
isMPressed = false;
break;
}
System.out.println("a is " + isAPressed + ", q is " + isQPressed
+ ", p is " + isPPressed + ", m is " + isMPressed);
}

@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}

public static void main(String[] args) {
new PingPong().setVisible(true);
}
}

如果需要多线程,请尽量简单,因为我是新手。

最佳答案

最可能的原因是您违反了 KeyListener 的焦点要求。

KeyListener 仅当其注册的组件可聚焦且具有焦点时才会触发按键事件。这是 KeyListener 的一个众所周知的问题。

您应该尝试使用按键绑定(bind) API,请参阅 How to Use Key Bindings了解更多详情。

关于java - 多按键事件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25495297/

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