2017-09-13 18 views
1

私はこのゲームを作っています(インベーダークローン:https://codepen.io/laughingskull/pen/NaWWzE?editors=0010)。私は船を左右に動かしたいと思っています。そして、コントロールが押されると、船が撃ちます。 問題はリリース制御であり、船の動きが止まったときです。 私はKeyDownイベントには、この関数をバインドしていますキーアップが発生した後にkeydownイベントを続ける方法

checkKey: function(e) { 
    e = e || window.event; 
    if (e.keyCode in map) { 
     map[e.keyCode] = true; 
     e.preventDefault(); 
     GAME.respond();   
    } 

、これはkeyUpイベントする:

clearKey: function(e) { 
    e = e || window.event; 
    if (e.keyCode in map) { 
     map[e.keyCode] = false; 
    }    
    if (e.keyCode === 17){ 
     GAME.respond(); 
    } 

GAME.respond()は次のようになります。押され

respond: function(){ 
    console.log("map", map); 
    if (map[17]) { 
      SHIP.shoot(); 
     } 
     if (map[37]) { 
      SHIP.move(LEFT); 
      return; 
     } 
     if (map[39]) { 
      SHIP.move(RIGHT); 
      return; 
     } 
     if (map[38]) { 
      SHIP.move(UP); 
      return; 
     } 
     if (map[40]) { 
      SHIP.move(DOWN); 
      return; 
     } 
}, 

キーを経由してマッピングされていますマップオブジェクト(他の場所で宣言されています)。 矢印キーがまだ何も起こらなくても、keyupイベントが発生した後に問題が発生します。どのように私は押されたキーを復元できますか?

+0

Phaser.jsインベーダーの例を見てください。その実装方法は、あなたのやり方をヒントにします。 http://phaser.io/examples/v2/games/invaders – IamSilviu

答えて

1

ほとんどのゲームでは、移動キーがゲームループに配置されます。つまり、各ループのキーマップを確認してそれに応じて移動し、移動キーを応答したことになります。私が知っているもう一つのことは、あなたがあるキーを押して、それを保持すると、別のキーを押し下げるまで、キーを押し下げるということです。つまり、最後のキーを押すだけです。したがって、イベントベースではなくループ内の状態をチェックした方が良いでしょう。

+0

実際、これはゲームループだった唯一のものでした。今は完璧に動作します。 –

関連する問題