2017-03-19 63 views
2

我爲我的遊戲創建了一個菜單系統,並且正在嘗試創建這些按鈕,以便在創建時,我可以傳遞一組指令(或函數)來執行點擊事件。Monogame/XNA點擊輸入監聽器或執行功能?

我有一個名爲ChangeScreen函數,該函數的參數enumScreen,我想能夠通過該功能到按鈕聽事件,像這樣(僞代碼傳入):

menuButtons.Add(new MenuButton(ChangeScreen(Screen.Settings), texture, hovertexture, position));

然後,我會列舉超過menuButtons並調用每個按鈕的UpdateDraw方法。我喜歡這個想法,它似乎比將每個MenuButton分配給它自己的變量更有效,而不是寫if語句來專門檢查每個按鈕。

這不是我想要的唯一用例。如果有可能,我希望能在一個方法傳遞,如:

menuButtons.Add(new MenuButton(new Method() { variableToSet = 1; }, texture, hovertexture, position));

我嘗試使用Action,但我就是不明白如何去正確地這樣做。是否有可能,還是有類似的解決方案?

+0

所以,你想創建某種回調,只要你的UI元素被按下? –

+0

是的,但我希望能夠在創建MenuButton時傳遞一個全新的功能。 – zuddsy

+0

我不認爲你真正清楚你在問什麼。也許嘗試改寫你的問題,你可能會得到更多的答案。 – craftworkgames

回答

0

所以,我想出了一個儘可能接近的解決方案。

在我MenuButton對象,我有

public delegate void ButtonEventHandler(object sender, EventArgs e); 
public event ButtonEventHandler onClick; 

當我想在Update()檢查點擊:

if (onClick != null && onClick.GetInvocationList().Length > 0) 
{ 
    OnClick(new EventArgs()); 
} 

然後,當我創建的每一個按鈕,它看起來是這樣的:

MenuButton button = new MenuButton(); 
button.onClick += MethodToExecute; 
menuButtons.Add(button); 

MethodToExecute(object sender, EventArgs e)包含任何操作我想要按鈕。

然後我只是簡單地循環通過menuButtons更新和繪製每個需要!