Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么';触发手动OnClick事件的最佳实践是什么?_C#_Events_Xna - Fatal编程技术网

C# 什么';触发手动OnClick事件的最佳实践是什么?

C# 什么';触发手动OnClick事件的最佳实践是什么?,c#,events,xna,C#,Events,Xna,我有一个XNA项目,将在屏幕上绘制几个对象。我希望用户能够与这些项目进行交互。因此,我试图构建一个方法,检查鼠标在哪个对象上,从最上面的对象中找出哪个对象,然后为该对象触发OnClick事件 检查上面的东西不是问题,但是把逻辑放在哪里才是最重要的问题 我最初的感觉是检查应该由主对象来处理——因为对于一个理想情况下只知道自身的对象来说,确定其他对象的信息是没有意义的。然而,从主对象远程调用OnClick事件似乎也是违反直觉的 在这种情况下,最好的做法是什么 谢谢, Tyler不要将逻辑放在事件处理

我有一个XNA项目,将在屏幕上绘制几个对象。我希望用户能够与这些项目进行交互。因此,我试图构建一个方法,检查鼠标在哪个对象上,从最上面的对象中找出哪个对象,然后为该对象触发OnClick事件

检查上面的东西不是问题,但是把逻辑放在哪里才是最重要的问题

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

在这种情况下,最好的做法是什么

谢谢,

Tyler

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

// inside the OnClick event handler
ActOnObject(clickedObject);
然后,您可以在代码中的任何其他位置为任何对象调用相同的方法:

ActOnObject(GetObjectUnderMouse()):

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

// inside the OnClick event handler
ActOnObject(clickedObject);
然后,您可以在代码中的任何其他位置为任何对象调用相同的方法:

ActOnObject(GetObjectUnderMouse()):

我可能会有一个类似“ObjectManager”的类,这个类将保存一个对象集合,并处理应该单击的当前对象的查找,然后对该对象调用click函数。由于对象本身并没有处理点击(在我的示例中,从技术上讲,它可能是整个游戏本身,或者ObjectManager可能是捕捉点击的对象),因此我将只取你想要点击的对象并调用类似的东西

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

最后,我想我是在建议一种与弗雷德里克非常相似的方法,但主要区别是我个人更喜欢“对象”知道点击应该做什么,因此,在对象本身上调用函数-这可能也是您在上面建议的函数中要做的…

我可能会有一个类似“ObjectManager”的东西,一个包含对象集合的类,可以处理应该单击的当前对象的查找,然后对该对象调用click函数。由于对象本身并没有处理点击(在我的示例中,从技术上讲,它可能是整个游戏本身,或者ObjectManager可能是捕捉点击的对象),因此我将只取你想要点击的对象并调用类似的东西

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

最后,我想我是在建议一种与Fredrik非常相似的方法,但是主要的区别是我个人更喜欢“对象”知道点击应该做什么,从而调用对象本身的函数-这可能是你在上面建议的函数中也会做的…

好吧,对于图形对象(纹理、精灵或其他类型…)

其中,您可以获得鼠标位置的屏幕坐标

或者,您可以创建一个帮助器类:

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

我会选择静态辅助对象。

对于图形对象(纹理、精灵或其他类型的…)

其中,您可以获得鼠标位置的屏幕坐标

或者,您可以创建一个帮助器类:

public static MouseHelper
{
  public static IsObjectClicked(MyObject obj, int X , int Y)
  {
     ....
  }
}
我会和静态助手一起去