2017-05-18 12 views
1

私はlibgdxを使用している種類のトレーナーを開発しようとしており、この種の問題に固執しています。私は、キーのユーザーが何かを押して、それを表示する(文字の場合)か、入力をクリアする(スペースキーの場合)かを検出する方法が必要です。私はこの解決策を思いついた:どのように押されたキー値を取得する

StringBuilder typeArea = new StringBuilder(); 
if (Gdx.input.isKeyJustPressed(Input.Keys.A)) { 
    typeArea.append(Input.Keys.toString(Input.Keys.A)); 
} else if (Gdx.input.isKeyJustPressed(Input.Keys.B)) { 
    typeArea.append(Input.Keys.toString(Input.Keys.B)); 
} else if ... { 
      ... 
} else if (Gdx.input.isKeyJustPressed(Input.Keys.SPACE)) { 
    typeArea.setLength(0); 
} 

よりエレガントな方法があるように感じる。私は次のようなものを探しています:

String letters = "abcdefg..."; 
StringBuilder typeArea = new StringBuilder(); 
if (Gdx.input.isKeyJustPressed(Input.Keys.ANY_KEY)) { 
    if (letters.indexOf(getKeyPressedValue()) >= 0) { 
     typeArea.append(getPressedKeyValue()); 
    } else if (getKeyPressedValue() == Input.Keys.SPACE) { 
     typeArea.setLength(0); 
    } 
} 

また、もっと簡単な方法があります。助言がありますか?

答えて

1

独自のInputListenerを作成し、イベントとともにキーコードを送信するkeyDownメソッドをオーバーライドすることができます。

InputListener il = new InputListener(){ 
     @Override 
     public boolean keyDown(InputEvent event, int keycode) { 
       typeArea.append(Keys.toString(keycode)); 
      return super.keyDown(event, keycode); 
     } 
    }; 

それともInputProcessorを実装し、オーバーライドにそのからのKeyDownメソッドを使用することができます。

あなたのクラスでInputProcessorインタフェースを実装し、その後、あなたのクラス

Gdx.input.setInputProcessor(this); 

に入力プロセッサを設定し、私はInputListener`はそうscene2dの一部である `見ることができるようにはKeyDown方法

@Override 
public boolean keyDown(InputEvent event, int keycode) { 
    typeArea.append(Keys.toString(keycode)); 
    return super.keyDown(event, keycode); 
} 
+0

を上書き私の問題を解決するために私は 'Screen'に' Stage'を追加し、何らかの 'Actor'を追加し、このリスナーをそれに付ける必要がありますか? –

+1

通常のInputProcessorを使用し、直接実装できるKeyDownイベントを使用することができます。私はこれを私の答えに加えます。 – dfour

関連する問題