2016-10-12 8 views
1

どうすればInputProcessorが動作するはずなのですか?libGDX - 画面ごとに異なるInputProcessorsを使用していますか?

ゲームに複数のScreensがあります。 implements InputProcessorというMyInputProcessorclassを作成しました。私のMenuState classで私はGdx.input.setInputProcessorクラスのインスタンスに。

すべての
  1. まず、どのように私はアクセスしMyInputProcessorで私MainMenu classで定義されている変数を設定する必要がありますか? touchDownメソッドで変数などを変更したい場合

  2. 私がScreensに切り替えると、他のタッチイベントを確認するために新しいInputProcessor classを作成する必要がありますか?私は明らかにそれがMainMenu classのために意味するものをチェックし続けることを望まない。それをどうやって使うのですか?

  3. Screenごとにまったく新しいInputProcessorを作成するはずですか?

これはすべて非常に混乱しています。助けてくれてありがとう。

+1

入力は通常、各画面がInputProcessorを実装する共通のパターンになるように各画面に密接に結合されているので、画面のshow()メソッドでGdx.input.setInputProcessor(this)を呼び出します。基本的には、各画面の入力内容を定義する必要があります。ステージを使用することは、今のところ無視することもできます。 StageはInputProcessorも実装します。一般的に、人々はUIのもの(ボタン、入力)にStagesを使用します。 – Barodapride

+0

ありがとうございます。 InputProcessorは私を混乱させました。 – S5amuel

答えて

2

はい、通常、ScreenごとにInputProcessorを1つ作成するか、入力を処理する必要があるすべてのオブジェクトに対してさらに優れたものを作成します。このオブジェクトはScreenですが、Playerを指定できます。
入力に関する通知を受け取る必要があるすべてのオブジェクトはInputProcessorを実装し、関連する入力を処理する必要があります。
InputProcessorを現在アクティブなもの(Gdx.input.setInputProcessorを使用)に設定してください。
例えばScreenは、showメソッドの現在のInputProcessorとして設定できます(最終的にはhideで登録解除されます)。 複数のInputProcessorを同時に使用する場合は(GameScreenPlayerは「w、a、s、d」で制御されますが、「Esc」にはPauseMenuを表示します)、InputMultiplexer各マルチプレクサにInputProcessorを登録してください。
あなたがInputMultiplexerを使用している場合は、あなたのInputProcessor -methodsの戻り値についての世話をするようにしてください:
は - proccessorがPlayerInputProcessor、例えば(イベントを処理した場合、trueを返し、とき「W」、「 "、" s "または" d "を押す)。 - イベントを処理しなかったときにfalseを返します(たとえば、PlayerInputProcessor、 "Esc"を押した場合)。
InputMulitplexerはすべてInputProcessorを送信し、イベントを送信します.1つはtrueです。他のすべての人はイベントについて通知されません。
Stageはで、イベントはActorに配信されます。したがって、Actorの入力を処理する場合は、Stageを必ず現在のInputProcessorに設定してください。

+0

ご協力いただきありがとうございます。あなたはワンタッチハンドラで基本的なモバイルゲームを作るときにステージを使うことを提案しますか? – S5amuel

+0

上記のコメントが誤って送信されました。 「ワン」から続ける:タッチゲームをプレイする?それとも過剰なのですか?私はそれを経験していないのですか? – S5amuel

+0

まあ、 'ステージ'にはいくつかの利点がありますが、いくつかの欠点もあります。どんなUI(メニューのような)でも小さなゲームでも完璧です。 Stageは既に 'Actor'のクリック/タッチをサポートしていますが、' Stage'がなければタッチしたオブジェクトを自分で検索する必要があります。 一方、「ステージ」では、大規模なゲームでは非常に重要なMVCパターン(http://stackoverflow.com/questions/21238638/using-mvc-with-libgdx-scene2d)を使用することができなくなります。 私は間違いなくUIのために 'ステージ'を使用し、より小さなゲームのためにそれを使用することを検討します。しかし、Libgdx wikiに関するドキュメントを見てください! – Springrbua

0

としてStageを使用していますか? はいの場合は、すべての画面に個別のStageインスタンスがあるとします。

Actorsをステージに追加し、入力を処理させる必要があります。 あなたはこれを行う複数の入力プロセッサ結合したい場合:

InputMultiplexer multiplexer = new InputMultiplexer(); 
multiplexer.addProcessor(yourCustomInputProcessor); 
multiplexer.addProcessor(stage) 
Gdx.input.setInputProcessor(multiplexer); 

をEDIT は、メイン画面のコンストラクタからではなく、それが表示された瞬間にGdx.input.setInputProcessorを呼び出さないでください。

+0

答えをありがとう。私は完全に紛失しているので、私はこれを読まなければならないでしょう。今は 'InputProcessor'を実装しているクラスがあります。これは、何かが起きている場合にScreenのチェックを変更するとインスタンスを作成します。私は前に遭遇したことのないステージを使用しません。 – S5amuel

+0

ステージはかなりいいですね、好きなActorを作成して、画面の描画メソッドで 'stage.update()'と 'stage.draw()'を呼び出してください。 'stage.update()'は、それに含まれるすべてのアクタに対して 'act()'メソッドを呼び出します。 したがって、 'Actor'を拡張して作成する場合は、これら2つのメソッドをオーバーライドする必要があります。 – Heisenbug

+0

ご協力ありがとうございます。私はステージやアクターについてもっと学びます。 – S5amuel

関連する問題