2017-05-30 47 views
0

因此,我正在製作一個簡單的JavaScript遊戲,我正在使用空格鍵來拍攝missles。處理用戶在JavaScript中關閉按鍵EventListener

這裏就是我有問題:

 document.addEventListener("keydown", keyDownHandler, false); 
     document.addEventListener("keyup", keyUpHandler, false); 

     function keyDownHandler(e){ 
      if(e.keyCode == 39){ 
       rightPressed = true; 
      } 
      else if(e.keyCode == 37){ 
       leftPressed =true; 
      } 
      else if(e.keyCode == 32){ //Keycode for space bar 
       missleFired = true; 
      } 
     } 

     function keyUpHandler(e){ 
      if(e.keyCode == 39){ 
       rightPressed = false; 
      } 
      else if(e.keyCode == 37){ 
       leftPressed = false; 
      } 
     } 

在我keyDownHandler,我用它來當用戶移動左,右的飛船,或者當用戶按空格鍵射擊追趕。問題是,我只想將「missleFired」變量設置爲true,最初是在按下該欄時。現在,用戶可以按住空格鍵並拍攝大量的導彈,但是我希望只有一個導彈才能從空格鍵被按下直到釋放。我怎樣才能做到這一點?

+0

你不顯示它,但這是在遊戲循環的背景下,是嗎?你能否在發射導彈的函數中設置'missleFired = false',從而迫使用戶釋放空格並再次按下它來觸發下一個導彈? – nnnnnn

+0

射擊導彈的代碼在哪裏? –

+0

我想出了傢伙!如果你對我的想法感興趣,請在下面檢查我的答案。 –

回答

0

我做到了這一點:missileFired塊依賴數組中的項目作爲字符串'one'以便進一步處理。使用oneTime.shift(),它消除了陣列中的項目和其變異

const oneTime = ['one']; 

function keyDownHandler(e){ 
    if(e.keyCode == 39){ 
     rightPressed = true; 
    } 
    else if(e.keyCode == 37){ 
     leftPressed =true; 
    } 
    else if(e.keyCode == 32){ //Keycode for space bar 
     if (e.keyCode == 32 && oneTime[0] !== 'one) { 
     oneTime.shift(); // will remove the string 'one' out of the array for good. this code will not execute again 
     missleFired = true; 
     } 
    } 
} 
+0

感謝您的回答。我在一分鐘前就明白了這一點,並在下面發佈了我的答案。哪種方法是更好的方法來解決這個問題? –

+0

不是我的答案。對不起,我誤解了這個問題,我以爲你需要一個解決方案,在整個腳本/應用程序中只使用一次missileFired – Chris

0

我計算出來:

 var keys = []; 
     document.addEventListener("keydown", keyDownHandler, false); 
     document.addEventListener("keyup", keyUpHandler, false); 

     function keyDownHandler(e){ 
      if(e.keyCode == 39){ 
       rightPressed = true; 
      } 
      else if(e.keyCode == 37){ 
       leftPressed =true; 
      } 
      else if(e.keyCode == 32){ 
       if(keys[e.keyCode]){ 
        missleFired = false; 
       } 
       else{ 
        missleFired = true; 
        keys[e.keyCode] = true; 
       } 
      } 
     } 

     function keyUpHandler(e){ 
      if(e.keyCode == 39){ 
       rightPressed = false; 
      } 
      else if(e.keyCode == 37){ 
       leftPressed =false; 
      } 
      else if(e.keyCode == 32){ 
       keys[e.keyCode] = false; 
      } 
     } 

我製成一個單獨的數組來保存某些鍵是否被按下並有一個布爾屬性,我可以檢查keyDownHandler何時被調用。