2017-05-30 9 views
0

私は単純なjavascriptゲームを作っており、スペースバーを使ってミスを撃っています。私keyDownHandlerで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; 
      } 
     } 

が、私は、ユーザーが宇宙船を左右に、またはユーザーが押したときにスペースバーを撮影するために移動しているとき、それはキャッチするために使用しています:私は問題を抱えているのはここ

です。問題は、最初にバーが押されたときだけ、 "missleFired"変数をtrueに設定することです。現在の状況では、ユーザーはスペースバーを押し下げてミサイルを爆発させることができますが、スペースバーを離してから解放するまで、1つのミサイルしか撃たれません。これどうやってするの?

+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

あなたの答えをありがとう。私はこれを1分前に考え出し、私は以下の答えを掲示しました。どのようにこれにアプローチするより良い方法は何ですか? –

+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; 
      } 
     } 

Iの特定のキーが押されたか否かを保持するために、別々のアレイを作っkeyDownHandlerが呼び出されたときにチェックできるブール値のプロパティを持っています。

関連する問題