0

我有一個用於捕獲和註冊箭頭鍵輸入的系統。它一直工作到一定程度。只要按下兩個或更少按鍵,它就可以正確記錄是否同時按下多個按鍵。如果三分之一或四分之一被按在一起,它會停止發射keydown事件。請參閱this jsFiddle並查看控制檯的輸出。Javascript keydown事件最多隻能觸發兩個鍵

這是瀏覽器設置的限制還是我的代碼錯誤?任何幫助將非常感激。

下面是代碼:

var keysPressed = { 
    37: false, 
    38: false, 
    39: false, 
    40: false 
}; 
var LEFT = 'left'; 
var RIGHT = 'right'; 
var UP = 'up'; 
var DOWN = 'down'; 
var ON = '_on'; 
var OFF = '_off' 

document.addEventListener('keydown', function(evt){ 
    var keycode = evt.keyCode; 
    if(!checkKeyPressed(keycode)){ 
     keysPressed[keycode] = true; 
     switch(keycode){ 
      case 37: 
       registerInput(LEFT+ON); 
       break; 
      case 38: 
       registerInput(UP+ON); 
       break; 
      case 39: 
       registerInput(RIGHT+ON); 
       break; 
      case 40: 
       registerInput(DOWN+ON); 
       break; 
      default: 
       break; 
     } 
    } 
}); 

document.addEventListener('keyup', function(evt){ 
    var keycode = evt.keyCode; 
    if(checkKeyPressed(keycode)){ 
     keysPressed[keycode] = false; 
     switch(keycode){ 
      case 37: 
       registerInput(LEFT+OFF); 
       break; 
      case 38: 
       registerInput(UP+OFF); 
       break; 
      case 39: 
       registerInput(RIGHT+OFF); 
       break; 
      case 40: 
       registerInput(DOWN+OFF); 
       break; 
      default: 
       break; 
     } 
    } 
}); 

function checkKeyPressed(keycode){ 
    if (keysPressed === null) { 
     return false; 
    } else return keysPressed[keycode]; 
} 

function registerInput(inputType){ 
    console.log(keysPressed); 
    //Game.Engine.playerInput(inputType); 
} 

回答

2

雖然這不一定是我怎麼會已經實現了,我想您的實現工作得很好。

請記住這一點:

不同的鍵盤會有不同的巴士鑰匙。
在更高質量的鍵盤上,您可以每次在鍵盤的每個「區域」得到更多按鍵......
但是,根據鍵盤的功能,按鍵的打印方式,區域的劃分方式等等,你會有或多或少的鑰匙,一次可以在任何特定的地方使用。例如,當我玩FPS遊戲和類似的動作遊戲時,通過我的常規映射,我不能蹲下,向前+向左移動,拉起排行榜並在我的鍵盤上同時重新加載。

無論我最後做什麼都將被忽略。

+0

好的謝謝。所以這是鍵盤的限制。 – RobotEyes 2013-03-27 21:16:36

+0

我可以讓所有四個同時在控制檯對象中回顯「true」,所以這是一個肯定的答案。 – Norguard 2013-03-27 21:24:11