2013-12-15 67 views
3

我正在創建一個基於回合的遊戲,其中戰場上的每個瓦片都是一個單獨的按鈕。如果玩家決定移動角色,則移動範圍內的圖塊(按鈕)會突出顯示(激活)。我還想讓路徑字符在每個光標進入移動範圍內的任何區塊時顯示 - 我不確定如何處理事件。我已經試過他們簡單地發送到路徑中的每一個瓦片(按鈕):如何在處理libGDX中的按鈕時發送(並取消)輸入事件?

final int X=i,Y=j; 
grid[i][j].addListener(new ClickListener(){ 
    @Override 
    public void enter(InputEvent event,float x,float y,int pointer,Actor fromActor) 
    { 
     if(isMovementActivated&&!grid[X][Y].isDisabled()&&!isParentActivated) 
     { 
      isParentActivated=true; 
      Tile temp = grid[X][Y]; 
      while(temp.parent!=null&&temp.parent.isEmpty()) 
      { 
       temp=temp.parent; 
       temp.fire(event); 
      } 
      isParentActivated=false; 
     } 
     } 
} 
}); 

(isParentActivated就在那裏,以防止在路徑前面的瓷磚進入代碼的同一部分。如果我是正確的,否則他們將只發送越來越多的事件,以那些已經強調了瓷磚 察看temp.parent.isEmpty()從突出人物本身的阻止:它返回true只爲沒有障礙磚)

雖然temp.fire(event)正確地高亮顯示路徑中的每個圖塊,但它在完成後不會取消該事件。我似乎無法找到一種方法來取消偵聽器的所有事件和「解決方案」,比如在偵聽器之外創建一個InputEvent變量,爲每個臨時磁盤發射()它並在需要時取消它 - 結果是錯誤的(或者我的代碼很糟糕;不幸的是,我還是個初學者)。

我可以暫時改變路徑中的按鈕樣式:它將包含常規「向上」圖像下的滾動圖像 - 所以基本上它看起來像翻過來一樣...沒有被實際翻轉或處理任何事件在所有。但是,再次,知道如何正確地做到這一點很好。

所以,我的問題是:有沒有辦法容易發送事件到其他按鈕,並在需要時取消它們?或者我堅持使用「骯髒」(?)解決方案,比如每次更改ButtonStyle?

回答

1
  1. 您應該使用的ImageButtonStyle力量要正確高亮按鈕,而沒有切換風格。定義這樣style

    "some-button": { 
        "imageUp": "default state of button", 
        "imageDown": "button is clicked", 
        "imageOver": "button with mouse over", 
        "imageChecked": "highlighted state (like imageUp but checked)", 
        "imageCheckedOver": "highlighted state with mouse over" 
    } 
    

    和通話按鈕,的setChecked(boolean checked)方法,使其強調

  2. 以這種方式使用事件是個壞主意。你不應該手動發送事件,你可以調用一些方法。

    ... 
    { 
        ClickListener clickListener = new ClickListener(){ 
         @Override 
         public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) 
         { 
          highlightButtons(fromActor); 
         } 
        } 
    
        grid[i][j].addListener(clickListener); 
    } 
    ... 
    
    public void highlightButtons(Actor actor) 
    { 
        // iterate through the buttons and call setChecked of each button should be highlighted 
        // to detect right buttons you could use ArrayMap<ImageButton, YourClass> 
    } 
    
+0

謝謝,我一直在尋找像setChecked方法(布爾檢查) - 而我敢肯定,我意識到這一點,似乎我不知道如何管理當時正確的按鈕樣式。我每次想突出顯示一個按鈕時都會通過更改樣式來解決問題,但是您的建議要好得多,我肯定會嘗試一下。非常感謝。 – JustACluelessNewbie