我有一个XNA项目,它将在屏幕上绘制几个对象。我希望用户能够与这些项目进行交互。因此,我试图构建一个方法来检查鼠标已经结束的对象,从最上面的对象中检查出哪个对象,然后为该对象启动一个OnClick事件。
检查上面的内容并不是问题所在,但最重要的是要把逻辑放在哪里。
我最初的感觉是,检查应该由一个主对象来处理,因为对于一个只了解自己的对象来说,确定其他对象的信息是没有意义的。然而,从主对象远程调用OnClick事件似乎也有违直觉。
在这种情况下,最好的做法是什么?
谢谢,
泰勒
发布于 2010-05-23 19:39:22
不要将逻辑放在事件处理程序中。相反,让事件处理程序调用另一个方法,将单击的对象作为参数传递:
// inside the OnClick event handler
ActOnObject(clickedObject);然后,您可以在代码中的任何其他地方调用相同的方法,用于任何对象:
ActOnObject(GetObjectUnderMouse()):发布于 2010-06-03 16:11:26
我可能会有一个类似于"ObjectManager“的类,这个类将保存对象的集合,并处理应该单击的当前对象的查找,然后调用该对象上的click函数。由于对象本身没有处理单击(但在我的示例中,技术上可能是整个游戏本身,或者可能是捕捉单击的ObjectManager ),所以我只需要使用您要单击的对象并调用类似的内容
Object.Click(whatever parameters are logical for your situation)最后,我想我建议了一种与Fredrik非常相似的方法,但是主要的区别是我个人更喜欢" object“知道单击应该做什么,从而调用对象本身的函数--这也是您在上面建议的函数中要做的.
发布于 2010-06-04 10:32:46
嗯,对于图形对象(纹理、精灵或其他.)
public MyObject()
{
....
public AreTheseMyCoordinates(int X, int Y);
}在哪里,得到鼠标位置的屏幕坐标。
或者你可以做一个助教班:
public static MouseHelper
{
public static IsObjectClicked(MyObject obj, int X , int Y)
{
....
}
}我会和静态助手一起去。
https://stackoverflow.com/questions/2893125
复制相似问题