Java - 收集过去值的最佳方法

标签 java performance swing keyevent

我有一个简单的马里奥游戏,并且有决定玩家不同动画和 Action 的关键事件。

他们是:

  • 向左移动
  • 向右移动
  • 向左跳转
  • 向右跳转

正如你可以想象的,玩家只有在向右移动并且按下了跳跃按钮时才能播放向右跳跃动画

enter image description here

我遇到的问题是一次只能发送 1 个键值。这使得带有 && 条件的 if 语句毫无用处。

这是不起作用的代码:

        if(key == KeyEvent.VK_LEFT) {
            if(distanceTraveled<300)dx=-5; else dx=-4;
            if(key == KeyEvent.VK_UP)
                player = jump_L_anim.getImage();
            else
                player = walk_L_anim.getImage();
         } else {
            if(distanceTraveled<300)dx=5; else dx=4;
            if(key == KeyEvent.VK_UP)
                player = jump_R_anim.getImage();
            else
                player = walk_R_anim.getImage();
        }

很简单,我意识到有解决方案,并开始尝试找出当前按下的键之前按下的键。(该键不能等于当前按下的键)。

<小时/>

这将允许 if 语句,例如

if key==right    &&     lastKey == up
    run jump_R animation
<小时/>

我设法能够捕获最后一个键,但不能捕获最后一个不是重复的键。

我感到很困惑,决定观看this missile guidance for dummies video 。这让我更加困惑,在我无聊的会计课上,我发现解决方案必须是将所有以前的值存储在一个数组中,然后我将从最后一个值循环到开头。我会继续这样做,直到数字不再继续为止。重复停止的数字是我要查找的最后一个值。

对于任何对此感到困惑的人,请查看这些关键 Action 的控制台读数

48
48
48
49
49
49
49
47
47
47

在这种情况下我要查找的数字是 49。这是因为它是最后按下的键,而不是当前键。

我这个问题背后的逻辑正确吗?你会如何解决这个问题?如果有一个简单的仅变量解决方案可用,我宁愿不使用数组。我正在寻找最快、最有效的逻辑。

最佳答案

也许你可以将当前按下的键存储到 HashSet 中,if 语句将类似于:

if (keyCodeSet.contains(x) && keyCodeSet.contains(y))

其中 x 和 y 是您想要的关键数字。释放按键后,您只需将它们从按键组中删除即可。

关于Java - 收集过去值的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23839544/

相关文章:

java - 如何使 JFreeChart 保持纵横比?

java - 哪些版本的 java 对于 gc 日志记录很慢?

java - JRadioButtonMenuItem 不是 JRadioButton 扩展

java - 将 JPanel 添加到 JScrollPane

java - Platform.RunLater 类似基于 JFXAT PlatformImpl 的行为线程实现来投入工作

java - 有条件地添加 Spring 应用程序同级

multithreading - Rust 中大量线程的性能下降

Python:封装在经常调用的函数中

java - 删除一行后 JTable 未重新绘制

java - ClusterJ 在初始化域类型处理程序失败后删除架构