gpt4 book ai didi

java - boolean 值不能同时工作

转载 作者:行者123 更新时间:2023-12-01 17:17:40 27 4
gpt4 key购买 nike

我一直在创建一个测试程序来测试某个角度上的移动可能如何工作,尽管这不是我的问题所在,但它是我的问题/困惑所在的程序。这个错误(?)不会影响我的程序的工作方式,除非用户想要对每个键进行按键混搭以查看会发生什么,而这正是我所做的......

我有一个按键监听器,在每次按键和按键释放时,它会在数组中设置一个 boolean 值:

public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
int a = KeyEvent.VK_LEFT; // int value of 37
int b = KeyEvent.VK_UP; // 38
int c = KeyEvent.VK_RIGHT; // 39
int d = KeyEvent.VK_DOWN; // 40

int aa = KeyEvent.VK_G; // 71
int bb = KeyEvent.VK_H; // 72

if(key == a || key == b || key == c || key == d) {
player.setKeyValue(key - 37, true); // keyReleased is exactly the same but with a false
}
if(key == aa || key == bb) {
player.setKeyValue((key - 71) + 4, true);
}
}

我让面板绘制了哪些键被按下,我注意到并非所有我按下的键都被绘制到屏幕上。我很困惑,认为这与缓冲图像太小有关,所以我仔细检查了这一点,奇怪的是事实并非如此。我决定将数组中的所有 boolean 值打印到控制台,我发现,事实上,有些键实际上在实际按下时并未被按下。

以下是我同时按下不同键时收到的一些输出:

// booleans are in order: Left, up, right, down, g, h
true, false, true, false, false, true
true, false, true, false, true, true
true, false, true, false, false, false

我不确定为什么会发生这种情况,但我感觉这与 JVM 在给定时间可以容纳的内存量有关。

虽然这对我来说没有真正的障碍,但很高兴知道这种情况如何以及为何发生?

最佳答案

我严重怀疑它与 JVM 在给定时间可以容纳的内存量有任何关系。

很难说什么是做你想做的事的最佳方法。

考虑这样的事情:

public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
int keyIndex = -1;

switch(key)
{
case KeyEvent.VK_LEFT: keyIndex = 0; break;
case KeyEvent.VK_UP: keyIndex = 1; break;
case KeyEvent.VK_RIGHT: keyIndex = 2; break;
case KeyEvent.VK_DOWN: keyIndex = 3; break;
case KeyEvent.VK_G: keyIndex = 4; break;
case KeyEvent.VK_H: keyIndex = 5; break;
default:
System.out.format("Unexpected KeyCode [%d]\n", key);
break;
}

if(keyIndex != -1){ player.setKeyValue(keyIndex, true); }
}

这种方法消除了很多麻烦,并且还尝试在您收到意外 key 时通知您。在不了解更多信息的情况下,很难给你更好的答案,但我提出的答案肯定不是最好的——这只是调试的一个步骤。我的猜测是类似 KeyEvents 或 Integers(对应于 KeyCodes)的 ArrayList 可能是更好的选择。

您可以对其进行编辑以始终显示键码,这样您就可以立即看到生成的键码。

关于java - boolean 值不能同时工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20837785/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com