2017-04-23 17 views
1

JavaScriptを使用した2Dプラットフォームゲームでキャラクターのキーボードコントロールを追加しようとしています。文字はwalk, dash and jumpです。ここに私の現在のコードは次のとおりです。2Dプラットフォームゲームで複雑な入力を処理するにはどうすればよいですか?

if(keyboard['LEFT']) { 
    //walk to left 
    //... 
} else if (keyboard['RIGHT']) { 
    //walk to right 
    if(keyboard['SHIFT'] && !jump) { 
     //dash 
    } 
    if(keyboard['JUMP']) { 
     //jump to right 
    } 
    if(keyboard['SHIFT'] && keyboard['JUMP']) { 
     //dash and jump (move further and faster) 
    } 
    if(keyboard['JUMP'] && keyboard['SHIFT']) { 
     //hold the right key, pressed jump key, and then pressed shift key 
     //it expected to jump to right here, because character can not dash 
     //in midair, but it will conflict the if condition above. 
    } 
} else if (keyboard['JUMP'] && onGround) { 
    //jump 
} else if (keyboard['SHIFT']) { 
    //dash 
    if(keyboard['JUMP']) { 
     //dash and jump 
    } 
} 

私は私のコードで()他の()文の場合、多くがあることが混乱しています、そして私がそこに簡単な方法をキーボードinputs.Isの順序を制御する必要があると思われますそれを処理するには?私は正しい方法で行っていますか?そうでない場合、それを達成するための一般的な方法は何ですか?どうか、助けていただければ幸いです。

+0

おそらくスイッチケースを使用し、それぞれのケースでそれぞれの機能を呼び出しますか? – Ayan

+0

@Ayanキーボード入力の順序を記録する必要はありますか? – undefined000

+0

「注文を記録する」とはどういう意味ですか?あなたがシーケンスを維持することを意味するなら、NO。ユーザーからの入力(ここではキーが押されている)を受け取り、それぞれの処理を行うだけです。 – Ayan

答えて

1

私はJSのノブであるので、これを短くしておきます。次の回答はjQueryに基づいており、生のJSではなく、あなたがswitch caseを使用するか、またはif..elseを使用することができますいずれかの条件文を置くことの代わりに、今

var map = {}; // You could also use an array 
onkeydown = onkeyup = function(e){ 
     e = e || event; // to deal with IE 
     map[e.keyCode] = e.type == 'keydown'; 
     /* Put your conditional statements here */ 
} 

:あなたはこちらにやろうとしていることは、あなたが以下のような何かを試すことができますので、複数のキーストロークを扱う基本的に
。以下のような何かにそれを行うだろう:

if(map[17] && map[16] && map[65]){ // CTRL+SHIFT+A 
     alert('Control Shift A'); 
}else if(map[17] && map[16] && map[66]){ // CTRL+SHIFT+B 
     alert('Control Shift B'); 
}else if(map[17] && map[16] && map[67]){ // CTRL+SHIFT+C 
     alert('Control Shift C'); 
} 

this私は上記のスニペットを抽出し、そこから可能な限り最高の答えです。

私はあなたがゲームを進歩するにつれてあなたを助けてくれる多くのバグ修正と改良をかなり詳しく説明していますので、慎重に回答を進めることをお勧めします。コメントも必ず読んでください。

UPDATE:

は、あなたの生活が少し楽にすることができ、他のJS LIBSのがたくさんある、あなたが急いでいるし、または独自のコード、テストおよびデバッグを書きたくないと仮定。それらのうちのいくつかは、mousetrap.js,jwerty.js,keypress.jsなどがhereと記載されています。

+0

うわー、それは素晴らしいです、私はあなたにとても感謝しています、ありがとう! – undefined000

+0

私の評判が15未満であるので、私はそれをアップヴォートできませんでした。 – undefined000

関連する問題