解雇手动OnClick事件的最佳实践是什么?

时间:2010-05-23 19:33:28

标签: c# events xna

我有一个XNA项目,它将在屏幕上绘制几个对象。我希望用户能够与这些项目进行交互。所以我正在尝试构建一个方法来检查鼠标所在的对象,从最顶层的对象中查找,然后为该对象触发OnClick事件。

检查上面的内容不是问题,但 实际上放置该逻辑是问题的主要原因。

我最初的感觉是检查应该由主对象处理 - 因为对于理想情况下只知道自身的对象来说,确定有关其他对象的信息是没有意义的。但是,从主对象远程调用OnClick事件似乎也是违反直觉的。

在这种情况下,最佳做法是什么?

谢谢,
泰勒

3 个答案:

答案 0 :(得分:4)

不要将逻辑放在事件处理程序中。而是让事件处理程序调用另一个方法,将被点击的对象作为参数传递:

// inside the OnClick event handler
ActOnObject(clickedObject);

然后,您可以在代码中的任何其他位置为任何对象调用相同的方法:

ActOnObject(GetObjectUnderMouse()):

答案 1 :(得分:0)

我可能会有类似“ObjectManager”的东西,这个类可以容纳对象的集合并处理应该单击的当前对象的查找,然后调用该对象上的click函数。由于对象本身不处理点击(它可能但在我的例子中技术上整个游戏本身,或者可能是ObjectManager是捕获点击的那个)然后我只是拿你想要点击的对象并调用类似的东西

Object.Click(whatever parameters are logical for your situation)

最后我认为我建议采用与Fredrik非常相似的方法,但主要区别在于我个人更喜欢“对象”来了解应该如何处理点击,从而调用对象本身的函数 - 这可能是你在上面建议的功能中所做的......

答案 2 :(得分:0)

好吧,对于图形对象(纹理,精灵或种类......)

public MyObject()
{ 
  ....

  public AreTheseMyCoordinates(int X, int Y);

}

在哪里,您可以获得鼠标位置的屏幕坐标。

或者你可以做一个帮手类:

public static MouseHelper
{
  public static IsObjectClicked(MyObject obj, int X , int Y)
  {
     ....
  }
}

我会选择静态助手。