Monogame / XNA在点击时输入监听器或执行功能?

时间:2017-03-19 05:11:31

标签: c# xna monogame

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

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

1 个答案:

答案 0 :(得分: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来更新并根据需要绘制每个!