2013-07-18 56 views
2

我有一個擴展Actor的Bubble類。LibGdx Stage/Actor InputListener(InputListener的適當區域)

public Bubble(MyGdxGame game,Texture texture){ 
    this.game=game; 
    setPosition(0,0); 
    setSize(32,32); 

    gameObject=new GameObject("","bubble"); 
    direction=new MovementDirection(); 
    sprite=new Sprite(texture); 

    setTouchable(Touchable.enabled); 
    setWidth(sprite.getWidth()); 
    setHeight(sprite.getHeight()); 
    setBounds(0,0,sprite.getWidth(),sprite.getHeight()); 

    addListener(new InputListener() { 
     public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { 
      Gdx.app.log("BUBBLE", "touchdown"); 
      return true; // must return true for touchUp event to occur 
     } 
     public void touchUp (InputEvent event, float x, float y, int pointer, int button) { 
      Gdx.app.log("BUBBLE", "touchup"); 
     } 
    }); 
} 

這是在實現屏幕

public void show() { 
    // TODO Auto-generated method stub 
    super.show(); 

    //2 bubbles test 
    gameStage=new Stage(MyGdxGame.WIDTH,MyGdxGame.HEIGHT,true); 
    Gdx.input.setInputProcessor(gameStage); 

    for (int i=0; i<10; i++){ 
     Bubble b=new Bubble(game,Assets.bubbleTexture); 
     b.randomize(); 
     gameStage.addActor(b); 
    } 

    //if (bubbleList==null) 
    // createBubbles(); 

} 

我要對這個通過添加監聽@泡水平走錯路的一類? (似乎爲我產生的每個泡泡創建一個InputListener有點瘋狂)。

根據:http://libgdx.l33tlabs.org/docs/api/com/badlogic/gdx/scenes/scene2d/Actor.html 演員有一個touchUp()和touchDown事件 - 但抱怨當我試圖重寫他們(這導致我認爲他們不存在)。覆蓋這些我覺得會更好的方法

+0

您在這裏使用的是什麼版本的libgdx? –

回答

4

您鏈接到的文檔已過時。 這些方法已被棄用和刪除,有利於使用InputListener s。

在您的例子,如果你想使用同一個InputListener實例爲您Actor類(Bubble)的所有實例,那麼你可以只實現InputListener使用inputEvent.getRelatedActor()來指代演員類的實例,然後實例化一個這樣InputListener作爲靜態成員Bubble,並在構造函數中將其傳遞給addListener

class Bubble extends Actor{ 
    private static InputListener bubbleListener= new InputListener() { 
     public boolean touchDown (InputEvent event, float x, float y, int pointer, int button)  { 
     Bubble b = (Bubble) event.getRelatedActor(); 
     b.doSomething(); 
     ... 
     return true; //or false 
     } 
    } 
    public Bubble(){ 
     addListener(bubbleListener); 
     ... 
    } 
    ... 

} 
+0

這是合適的地方嗎?或者我應該在舞臺層面上做到這一點?我想知道什麼是最佳做法或建議。 –