我正在創建一個基於回合的遊戲,其中戰場上的每個瓦片都是一個單獨的按鈕。如果玩家決定移動角色,則移動範圍內的圖塊(按鈕)會突出顯示(激活)。我還想讓路徑字符在每個光標進入移動範圍內的任何區塊時顯示 - 我不確定如何處理事件。我已經試過他們簡單地發送到路徑中的每一個瓦片(按鈕):如何在處理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?
謝謝,我一直在尋找像setChecked方法(布爾檢查) - 而我敢肯定,我意識到這一點,似乎我不知道如何管理當時正確的按鈕樣式。我每次想突出顯示一個按鈕時都會通過更改樣式來解決問題,但是您的建議要好得多,我肯定會嘗試一下。非常感謝。 – JustACluelessNewbie