我正在制作一个“游戏”,我在控制中遇到了麻烦。我目前正在使用数字keyCode值(因为它们对我来说似乎更有效和漂亮),尽管在尝试使用以下值绑定以下键时似乎没有发生任何事情:& 49岁,é50岁,“222岁。
我从http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes获得了代码,这些是我遇到的第一个问题。
作为旁注,我正在使用Mac和AZERTY键盘。
提前致谢,
实际代码:
void keyPressed() {
if (mode == "azerty") {
if (key == CODED) {
if (keyCode == 38) {
keybool[0] = true;
}
else if (keyCode == 40) {
keybool[1] = true;
}
if (keyCode == 37) {
keybool[2] = true;
}
else if (keyCode == 39) {
keybool[3] = true;
}
if (keyCode == 16) {
keybool[4] = true;
}
if (keyCode == 49) {
keybool[5] = true;
}
if (keyCode == 50) {
keybool[6] = true;
}
if (keyCode == 222) {
keybool[7] = true;
}
}
}
}
void keyReleased() {
if (mode == "azerty") {
if (key == CODED) {
if (keyCode == 38) {
keybool[0] = false;
}
else if (keyCode == 40) {
keybool[1] = false;
}
if (keyCode == 37) {
keybool[2] = false;
}
else if (keyCode == 39) {
keybool[3] = false;
}
if (keyCode == 16) {
keybool[4] = false;
}
if (keyCode == 49) {
keybool[5] = false;
}
else if (keyCode == 50) {
keybool[6] = false;
}
else if (keyCode == 222) {
keybool[7] = false;
}
}
}
}
void keyFunc() {
if (keybool[0]) {
player.move(1);
}
else if (keybool[1]) {
player.move(-1);
}
if (keybool[2]) {
player.turn(-0.5);
}
else if (keybool[3]) {
player.turn(0.5);
}
if (keybool[4]) {
}
if (keybool[5]) {
player.attack(0);
}
else if (keybool[6]) {
player.attack(1);
}
else if (keybool[7]) {
player.attack(2);
}
}
void attack(int attackNum) {
if (attackNum == 0) {
println("SLASH!");
} else if (attackNum == 1) {
println("STAB!");
} else if (attackNum == 2) {
println("PUMMEL!");
}
}
答案 0 :(得分:0)
您链接的代码是javascript密钥代码。为什么Key Event描述不合适呢? VK_QUOTEDBL,VK_AMPERSAND等。可读性很重要,但不如功能重要。
答案 1 :(得分:0)
使用keyCodes更优雅的方式也可以减少错误概率(遗忘中断:P)是这样的:
switch (keyCode) {
case 38: // Up
break;
case 40: // Down
break;
case 37: // Left
break;
case 39: // Right
break;
default:
System.out.println("case " + keyCode + ": // " + KeyEvent.getKeyText(keyCode) + "\nbreak;");
}
示例输出:
case 112: // F1
break;
case 113: // F2
break;
case 69: // E
break;
case 10: // Enter
break;
case 18: // Alt
break;
case 115: // F4
break;
您可能希望将该行放入方法中。
您也可能对此方法(使用反射)感兴趣,该方法获取扫描码,这是一种独立于键盘语言布局的键值,但这仅适用于Windows。很遗憾我们不会变得简单"这是硬件密钥,这是识别它的数字。" Java中的信息。 :(