首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KeyCodes处理

KeyCodes处理
EN

Stack Overflow用户
提问于 2014-02-05 18:40:52
回答 2查看 3.1K关注 0票数 0

我目前正在做一个“游戏”,在游戏中,我遇到了控制方面的问题。我目前正在使用数值keyCode值(因为它们在我看来更高效、更漂亮),尽管在尝试用以下值绑定以下键时似乎什么都没有发生:与49,50,和222。

我从http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes获得了代码,这是我遇到的第一个问题。

顺便提一下,我用的是Mac和AZERTY键盘.

提前谢谢你,

实际代码:

代码语言:javascript
复制
    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!");  
    }  
  }  
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-02 15:08:31

使用keyCodes的一种更优雅的方式也降低了错误的概率(遗忘的中断:P),这是:

代码语言:javascript
复制
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;");
}

示例输出:

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2014-02-05 18:58:53

您所链接的代码是javascript密钥代码。为什么关键事件的描述不漂亮?VK_QUOTEDBL,VK_AMPERSAND等。可读性很重要,但不像功能那么重要。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21585729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档