2012-03-18 20 views
2

私はlibgdxをテストしていますが、私はユーザーの入力処理に苦しんでいます。libgdx - 俳優の入力イベントが発生しません

私の最初の試みはレンダリングメソッドから直接Gdx.inputを使用していましたが、私はタッチイベントを受け取ったときに入力領域を検出するために多くのコードを書いています。

私は、Actorクラスを使用する方が良い方法だと確信していますが、イベントが発生しないので間違っていなければならないことがあります。ここで

は私のコードです:

... 
    Texture texture = new Texture(Gdx.files.internal("assets/sprite-sheet.png")); 
      singlePlayerButton = new Image("SinglePlayerButton", new TextureRegion(texture,0,0,50,50)){ 

       @Override 
       public boolean touchDown(float x, float y, int pointer) { 
        // TODO Auto-generated method stub 
        System.out.println("touch down"); 
        return super.touchDown(x, y, pointer); 
       } 

       @Override 
       public void touchUp(float x, float y, int pointer) { 
        System.out.println("touch up");    
       } 

      }; 

      stage.addActor(singlePlayerButton); 
... 

public void render(float delta) { 
     // Clear the screen 
     Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);   
     stage.draw(); 
     spriteBatch.end(); 
    } 

画像がうまく表示されますが、それは私がそれをクリックした回数は関係ありません、私はイベントは発生しません飽きません。私は何が欠けていますか?イベントを登録しますか?ステージまたはアクタクラスでaddTouchListener()メソッドを見つけることができません。

ありがとうございます!

答えて

16

すべての入力プロセッサーをlibGDXに登録する必要があります。あなたはそれを登録する必要がありますので、ステージは、InputProcessorを実装します。

@Override 
public void create() { 
    //... initialization 

    Gdx.input.setInputProcessor(stage); 
} 
+0

おかげで仲間、それは愚かな質問だったが、このゲームは、エンジンの静止画は正直に言うと、これはエンジンに対して評論家ではありません(良いドキュメントから欠けている私は考えますそれは素晴らしいプロジェクトです)。この入力プロセッサーをいつでも別のステージでオーバーライドできますか? – rsan

+2

これにはInputMultiplexerを使用できます。必要に応じて、InputProcessorをマルチプレクサに追加/削除することができます。または、必要に応じて別のInputProcessorを設定するだけです。 – Ludevik

+0

Tnx、完璧に動作します:) – rsan

関連する問題