我有一个简单的马里奥游戏,并且有决定玩家不同动画和 Action 的关键事件。
他们是:
- 向左移动
- 向右移动
- 向左跳转
- 向右跳转
正如你可以想象的,玩家只有在向右移动并且按下了跳跃按钮时才能播放向右跳跃动画
我遇到的问题是一次只能发送 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/