java - 如何处理 Java Applet 中的多个按键?

标签 java multithreading

我正在通过在线教程自学如何用 Java 编写游戏。我正在使用 Java Applets 创建 Pong 游戏。每个 Racket 由不同的键控制,进行 1v1 比赛。如果两个用户在不同的时间按下键,这就可以正常工作。但是当一个键被按住然后另一个键被按住时(例如:按住箭头键,然后用户 2 按住“S”键),第二个键覆盖第一个并且第一个桨将停止移动。我猜我需要使用线程,但我对它们知之甚少,而且我无法理解如何使用/实现它们。当按下两个(或更多)键时,我将如何处理这种情况?

奖励:就像我说的那样,我对线程知之甚少 - 我假设我还需要一个线程来让球/冰球在其他所有事情进行时四处移动。是正确的吗?如果是这样,我该如何在不需要输入的东西上放置线程?

谢谢你的帮助, 打碟机

最佳答案

你通常做的是记住每个按键的状态。

您可以保留一系列操作(如果需要,也可以保留所有键的数组)。 keyDown 事件导致例如

boolean actions[12];...
...

public boolean keyDown( Event e, int key ) {
 if (key == 'a') {
    actions[ACTION_LEFT] = true; 
  }
..
}

并且您需要捕获 keyup 事件并在释放键时将操作设置为 false。

在移动逻辑中,您可以只检查按键的状态

if(actions[ACTION_LEFT] == true)
   moveLeft();
if(actions[ACTION_RIGTH] == true)
   moveRight();

关于java - 如何处理 Java Applet 中的多个按键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1133369/

相关文章:

java - 如何从 pom.xml 配置 Jetty 默认 servlet? (初始化参数 useFileMappedBuffer)

Java : call an API 200 times in parallel with no return expected

java - 在 Java 中使用 System.err 有什么问题?

java - 从 ImageView 中打开菜单

java - 单线程服务器如何能够通过非阻塞 I/O 满足多个客户端的需求?

java - 使用 Java 的 Google Data API 中的 OAuth

Java 在自己的线程中绘制图形,在 EDT 之外?

java - 如何在 Java 中对计算密集型代码段进行多线程处理?

java - 当有多个处理器时,Thread.currentThread() 是如何工作的?

c# - 如何使类中的属性线程安全