2016-11-01 63 views
-1

我的LibGDX遊戲中有一個ImageButton,可能會引起用戶惱火。如果我按下按鈕,但決定不想單擊它,我會將手指拖開。
但是,即使將手指拖離圖像按鈕後,我的手指不再位於該圖像按鈕之上,仍會調用touchUp()方法。將手指拖走後仍然會調用ImageButton觸摸事件

如何停止touchUp事件的發生?

我不知道是否得到該ImageButton的邊界(如何去),看看touchUp位置是否對應,可能會起作用。我嘗試過查找它,但迄今爲止我還沒有找到任何東西,因爲我的問題非常具體。

這是怎麼了,我初始化我的按鈕:

retryButton = new ImageButton(getDrawable(new Texture("RetryButtonUp.jpg")), getDrawable(new Texture("RetryButtonDown.jpg"))); 


retryButton.addListener(new InputListener() { 
     @Override 
     public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { 
      return true; 
     } 

     @Override 
     public void touchUp(InputEvent event, float x, float y, int pointer, int button) { 
      if(touchable) { 
       game.setScreen(new PlayScreen(game, difficulty)); 
       dispose(); 
      } 
     } 
    }); 

回答

1

您應該使用ClickListener而不是InputListener,並且代替重寫touchUp方法,覆蓋clicked方法。

+0

謝謝...你有什麼想法,爲什麼我的問題了downvotes? – Eames

+0

Button已內置ClickListener - 添加ChangeListener而不是另一個ClickListener以避免冗餘輸入處理更有意義。不知道爲什麼你的問題是downvoted - 看起來不錯。 – Tenfour04

0

擴展了grimrader22的答案,我也建議使用ClickListener來處理觸摸事件,但即使您將手指拖動到ImageButton之外,仍然會發出觸發touchUp事件中代碼的相同問題,這就是爲什麼clicked方法應該工作得很好。

但是,如果你想使用touchUptouchDown方法,這裏亞去:在touchUptouchDown x和y的值表示在ImageButton的觸摸事件的本地座標。所以,簡單的解決方案是,以確保touchUp方法中的事件的x和y是兩個ImageButton的本地座標中......

@Override 
    public void touchUp(InputEvent event, float x, float y, int pointer, int button) { 
     boolean inX = x >= 0 && x < getWidth(); 
     boolean inY = y >= 0 && y < getHeight(); 
     if(inX && inY && touchable) { 
      game.setScreen(new PlayScreen(game, difficulty)); 
      dispose(); 
     } 
    } 
相關問題