Monogame/XNA 输入侦听器或点击执行功能?
Monogame/XNA Input listener or execute function on click?
我正在为我的游戏创建一个菜单系统,并尝试制作按钮以便在创建时,我可以传递一组指令(或函数)以在单击事件时执行。
我有一个名为 ChangeScreen
的函数,它接受一个 enum
参数 Screen
,我希望能够将此函数传递到按钮侦听事件中,像这样(伪代码传入):
menuButtons.Add( new MenuButton(ChangeScreen(Screen.Settings), texture, hovertexture, position) );
然后我将枚举 menuButtons
并调用每个按钮的 Update
和 Draw
方法。我喜欢这个想法,它似乎比将每个 MenuButton
分配给它自己的变量更有效,而不是编写 if 语句来专门检查每个按钮。
但这不是我想要的唯一用例。如果可能的话,我希望能够传递这样的方法:
menuButtons.Add( new MenuButton(new Method() { variableToSet = 1; }, texture, hovertexture, position) );
我尝试使用 Action
,但我只是不明白如何正确地执行此操作。完全可以,或者有类似的解决方案吗?
所以,我找到了一个尽可能接近的解决方案。
在我的 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
以根据需要更新和绘制每个!
我正在为我的游戏创建一个菜单系统,并尝试制作按钮以便在创建时,我可以传递一组指令(或函数)以在单击事件时执行。
我有一个名为 ChangeScreen
的函数,它接受一个 enum
参数 Screen
,我希望能够将此函数传递到按钮侦听事件中,像这样(伪代码传入):
menuButtons.Add( new MenuButton(ChangeScreen(Screen.Settings), texture, hovertexture, position) );
然后我将枚举 menuButtons
并调用每个按钮的 Update
和 Draw
方法。我喜欢这个想法,它似乎比将每个 MenuButton
分配给它自己的变量更有效,而不是编写 if 语句来专门检查每个按钮。
但这不是我想要的唯一用例。如果可能的话,我希望能够传递这样的方法:
menuButtons.Add( new MenuButton(new Method() { variableToSet = 1; }, texture, hovertexture, position) );
我尝试使用 Action
,但我只是不明白如何正确地执行此操作。完全可以,或者有类似的解决方案吗?
所以,我找到了一个尽可能接近的解决方案。
在我的 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
以根据需要更新和绘制每个!