KeyCodes处理

时间:2014-02-05 18:40:53

标签: java processing numerical

我正在制作一个“游戏”,我在控制中遇到了麻烦。我目前正在使用数字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!");  
    }  
  }  

2 个答案:

答案 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中的信息。 :(

https://stackoverflow.com/a/26688875/3500521