【问题标题】:KeyEvents are not received when pressing keys at the same time同时按键时收不到KeyEvents
【发布时间】:2015-07-22 19:19:46
【问题描述】:

我正在用 java 编写一个游戏,在同一个键盘上有两个玩家。如果其中一个玩家按住他们的前进按钮,而第二个玩家按下他的前进按钮,那么第一个玩家就会停止。这种情况反过来也发生了,我不知道如何解决它。

  addKeyListener(new KeyListener() {

        @Override
        public void keyTyped(KeyEvent e) {

        }
        @Override
        public void keyPressed(KeyEvent e) {
            paddle.keyPressed(e);
            paddletwo.keyPressed(e);
        }
        @Override
        public void keyReleased(KeyEvent e) {
            paddle.keyReleased(e);
            paddletwo.keyReleased(e);
        }

在每个桨类我也有这个:

public void keyReleased (KeyEvent e) {
    ya = 0;
}

public void keyPressed(KeyEvent e) {
   if(e.getKeyCode() == KeyEvent.VK_UP)
       ya = -pong.speed;
   if(e.getKeyCode() == KeyEvent.VK_DOWN)
       ya = pong.speed;
}

玩家二使用 VK_W 和 VK_S 而不是 UP 和 DOWN。

【问题讨论】:

  • 检查哪个键被释放并使用键绑定 API 代替
  • 不检查释放了哪个键,如果释放了任何键,您将停止..
  • 试试this

标签: java awt keylistener keyevent


【解决方案1】:

这与实际的硬件键盘有关。为了降低成本,控制线是共享的,因此不可能同时按下某个键组合。

要么购买高端键盘,要么仔细选择按键,以尽量减少干扰(当然,您使用的按键越多,这就越难,并且会产生一些看起来很有趣的控件)。

Here's解释原因。

编辑: 实际上,当仅涉及 2 个键时,这不应该影响,仅涉及 3 个或更多键。

【讨论】:

  • 但如果您只测试 4 个键(其中 2 个在键盘右侧,2 个在左侧)应该不会有问题。
  • 你的依据是什么?
  • 在他的问题中他说,paddle1 测试 VK_W 和 VK_S,而 paddle2 测试 VK_UP 和 VK_DOWN。一般同块4键以上应该会出问题,但是左边3键右边3键应该没问题(我在笔记本的键盘上测试过,确实不高结束键盘,我用左手按了 3 个键,用我的右手按了 3 个键,它仍然设法把它们全部按下)
  • 这只告诉你你的键盘没有这些特定键的问题。
  • 不,我用几个键测试了它,你可以清楚地看到,当同一侧的键太多时出现问题。按键也按“块”排列,键盘无法识别同一“块”中的太多按键
猜你喜欢
  • 2015-10-30
  • 1970-01-01
  • 2012-04-18
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
相关资源
最近更新 更多