java - KeyListener 没有按照我想要的方向键工作方式工作?

标签 java keylistener arrow-keys

我正在制作一个贪吃蛇游戏,并且我已经实现了 KeyListener 类,该类可以监听用户何时按下箭头键或 WASD 键。

在《蛇》中,当你按下移动键时,如果你只按一次移动键,蛇就会继续移动,只有当你输入不同的移动命令时,它才会向另一个方向移动。然而,在我的程序中,我必须按住按键才能让蛇移动,我不能只按一次。如何才能让我只需要按一次键就可以移动蛇?

此外,WASD 键的工作方式与箭头键不同。当我按下 WASD 键时,蛇只移动一格然后停止,这与箭头键不同,只要按住箭头键蛇就会移动。如何使 WASD 键的工作方式与我希望箭头键的工作方式相同?

这是代码:

public void keyTyped(KeyEvent e) {
}

public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_LEFT || e.getKeyCode() == KeyEvent.VK_A) {
        out.println("Left key pressed");
        // handle snake left movement
    } else if (e.getKeyCode() == KeyEvent.VK_RIGHT || e.getKeyCode() == KeyEvent.VK_D) {
        out.println("Right key pressed");
        // handle snake right movement
    } else if (e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_W) {
        out.println("Up key pressed");
        // handle snake up movement
    } else if (e.getKeyCode() == KeyEvent.VK_DOWN || e.getKeyCode() == KeyEvent.VK_S) {
        out.println("Down key pressed");
        // handle snake down movement
    }
}

public void keyReleased(KeyEvent e) {
}

最佳答案

您需要将游戏的事件循环转变为由Timer驱动的东西,它会查询您的蛇的current_direction变量。 KeyListener 将设置此 current_direction 变量。

使用计时器可以让您的游戏独立于按键重复率。这允许您增加/减少游戏的难度。

关于java - KeyListener 没有按照我想要的方向键工作方式工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46062849/

相关文章:

java - Spring:嵌套异常是 java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice

java - 单击按钮后 keylistener 不工作

java - 在 Java 中使用 KeyListener

perl - 在 Perl 调试器和 CPAN 客户端中向上和向下箭头不再起作用

java - 没有 XML 的 Spring Bean 注释

java - Criteria API 中有类似 Restrictions.eq(true, false) 的东西吗?

java - 在 Mac 上使用 Netbeans 连接 SQLite

java - 如何检查KeyListener输入?

c++ - 在 Windows 上显示向上/向下箭头 C++

javascript - jQuery e.which 在 switch 语句中