【问题标题】:KeyCodes Processing键码处理
【发布时间】:2014-03-02 09:13:46
【问题描述】:

我目前正在开发一个“游戏”,在其中我遇到了控件问题。我目前正在使用数字 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!");  
    }  
  }  

【问题讨论】:

  • 您可以发布您尝试运行的代码吗?
  • 你的问题是什么?
  • 什么是模式?为什么使用 == 来比较字符串?您应该改用 equals() 函数。
  • 如果您有超过 3 个备选方案,请使用 switch 语句!
  • 在什么平台上运行?阅读纯字符有什么问题? (不,“性能”并没有削减它,除非您显示 测量结果 证明差异与您的使用相关。)

标签: java processing numerical


【解决方案1】:

使用 keyCodes 的一种更优雅的方式是这样的:

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

【讨论】:

    【解决方案2】:

    您链接的那些代码是 javascript 键代码。为什么Key Event 的描述不漂亮? VK_QUOTEDBL、VK_AMPERSAND 等。可读性很重要,但不如功能重要。

    【讨论】:

    • 我确实尝试了这些,但我得到了错误“insert key is not found”。
    • “自 2007 年以来,Apple Macintosh 计算机已将插入键替换为 Fn 键,以允许将顶行用作“媒体键”和传统功能键”en.wikipedia.org/wiki/Insert_key
    • (带插入键,我不是指实际的“插入”键)
    • 啊,好吧哈哈。好吧,回到你原来的问题。当您将 '&'、'é' 和 '"' 与您列出的值不同的值绑定时,问题是否仍然存在?
    猜你喜欢
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多