【问题标题】:Monogame/XNA Input listener or execute function on click?Monogame/XNA 输入监听器或点击执行功能?
【发布时间】:2017-03-22 22:07:40
【问题描述】:

我正在为我的游戏创建一个菜单系统,并尝试制作按钮,以便在创建时,我可以传递一组指令(或函数)以在点击事件上执行。

我有一个名为ChangeScreen 的函数,它接受一个enum 参数Screen,我希望能够将此函数传递给按钮监听事件,就像这样(伪代码传入) :

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,但我只是不明白如何正确执行此操作。有可能吗,还是有类似的解决方案?

【问题讨论】:

  • 所以你想在你的 UI 元素被按下时创建某种回调?
  • 是的,但我希望能够在创建 MenuButton 时传递一个全新的功能。
  • 我认为您的要求不是很清楚。也许尝试改写你的问题,你可能会得到更多的答案。

标签: c# xna monogame


【解决方案1】:

所以,我想出了一个尽可能接近的解决方案。

在我的 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 以根据需要更新和绘制每个!

【讨论】:

    猜你喜欢
    • 2021-10-13
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    相关资源
    最近更新 更多