簡體   English   中英

在處理libGDX中的按鈕時如何發送(和取消)輸入事件?

[英]How to send (and cancel) input events when dealing with buttons in 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是為了防止路徑中的前一個tile進入代碼的相同部分。如果我是對的,否則他們只會向已經突出顯示的tile發送越來越多的事件。檢查temp.parent。 isEmpty()阻止突出顯示字符本身:它僅對沒有障礙的圖塊返回true。)

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

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

所以,我的問題是:有沒有辦法輕松地將事件發送到其他按鈕並在需要時取消它們? 還是我堅持使用“臟”(?)解決方案,比如每次都更換ButtonStyle?

  1. 您應該使用ImageButtonStyle的強大功能正確突出顯示按鈕而不是切換樣式。 定義這樣的風格

     "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> } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM