我有一个XNA项目,它将在屏幕上绘制几个对象。我希望用户能够与这些项目进行交互。所以我正在尝试构建一个方法来检查鼠标所在的对象,从最顶层的对象中查找,然后为该对象触发OnClick事件。
检查上面的内容不是问题,但 实际上放置该逻辑是问题的主要原因。
我最初的感觉是检查应该由主对象处理 - 因为对于理想情况下只知道自身的对象来说,确定有关其他对象的信息是没有意义的。但是,从主对象远程调用OnClick事件似乎也是违反直觉的。
在这种情况下,最佳做法是什么?
谢谢,
泰勒
答案 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)
{
....
}
}
我会选择静态助手。