2012-11-02 61 views
4

我使用舞臺上的演員作爲按鈕。我可以檢測touchDown/touchUp事件何時發生在演員身上,但當用戶點擊演員然後繼續將他們的手指從演員拖出時,touchUp事件從不會觸發。我嘗試使用退出事件,但它永遠不會觸發。在我的程序中,touchUp/touchDown事件決定了移動以及按鈕的顏色,這取決於按鈕是否被按下。所以我'留下了一個永久的「壓低」按鈕,直到它再次點擊/向上。我使用的代碼libgdx touchUp事件

例子:

stage.addListener(new InputListener() { 

    public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { 
     Actor actor = stage.hit(x, y, true); 
     if (actor != null){ 
      System.out.println("touchDown: " + actor.getName().toString()); 
     } 
     return true; 
    } 

    public void touchUp (InputEvent event, float x, float y, int pointer, int button) { 
     Actor actor = stage.hit(x, y, true); 
     if (actor != null){ 
       System.out.println("touchUp: " + actor.getName().toString());   
       } 
     } 

    public void exit(InputEvent event, float x, float y, int pointer, Actor toActor){ 
     System.out.println("exit"); 
    } 
}); 
+2

你使用的是什麼版本的libgdx?最新似乎沒有'Stage.addListener()'。也許這是一個修復版本比你使用的更新的版本。 – kichik

+0

我使用的是從10/20/2012開始的每晚構建,libgdx.txt表示它的0.9.3,然後我會嘗試0.9.6。 –

+0

啊。那麼,我對流血的邊緣不太瞭解。如果我不得不猜測,我會說執行'touchDragged()'可能會有所幫助。 – kichik

回答

1

我有同樣的問題。我通過創建boolean isDown變量作爲我的GameScreen類的字段來修復它。每當touchDown發生在我的背景圖片我讓isDown變量爲true,當touchUp發生時 - isDown = false。那樣touchUp總是會發生。然後仍然在我GameScreen在渲染方法我檢查isDown是真實的,如果是,我檢查觸摸我的演員相交:

if (isDown) { 
    if (pointIntersection(myActor, Gdx.input.getX(), Gdx.input.getY())) { 
       // do something 
    } 
} else { 
    // reverse the effect of what you did when isDown was true 
} 

其中pointIntersection方法是:

public static boolean pointIntersection(Image img, float x, float y) { 
    y = Gdx.graphics.getHeight() - y; 
    if (img.x <= x && img.y <= y && img.x + img.width >= x && img.y + img.height >= y) 
     return true; 

    return false; 
} 

這是隻有解決方法,我發現。儘管如此,它不是很漂亮,但適合我。

3

如果更改

stage.addListener(new InputListener() {}); 

stage.addListener(new ClickListener() {}); 

它將識別觸通話。它仍然能夠處理TouchDown和Exit呼叫。

+0

爲什麼?這是一個錯誤?它會被修復嗎? – Winter