2012-03-18 110 views
2

進出口檢驗libgdx但我被陷在用戶輸入處理。使用Gdx.input直接從渲染方法libgdx - 演員輸入事件不觸發

我的第一次嘗試,但我覺得自己像重新發明輪子因爲我寫了很多的代碼來檢測時,我得到的觸摸事件的輸入區域。

我幾乎可以肯定有更好的方式應該使用演員類,但有件事情我必須錯becase的事件永遠不會火做。

這裏是我的代碼:

... 
    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(); 
    } 

圖像顯示良好,但沒關係我就可以點擊多少次,我從來沒有得到過觸發的事件。我錯過了什麼?註冊事件?我在Stage或Actor類中找不到任何addTouchListener()方法。

謝謝!

回答

16

你必須註冊libGDX所有輸入處理器。舞臺實現InputProcessor,所以你必須註冊它:

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

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

謝謝兄弟,這是一個愚蠢的問題,但這個遊戲引擎劇照缺乏從好的文檔(這不是針對發動機評論家,說實話,我認爲這是一個很棒的項目)。我可以隨時用不同的階段覆蓋這個輸入處理器嗎? – rsan 2012-03-18 18:11:47

+2

您可以使用InputMultiplexer這一點。您可以根據需要添加/刪除InputProcessors到多路複用器。或者只需在需要時設置另一個InputProcessor。 – Ludevik 2012-03-18 19:07:55

+0

TNX,可以完美運行:) – rsan 2012-03-18 23:09:52