0

假设我有多个相互重叠的对象,如果我单击其中一个,从 TouchPanel.GetState() 返回的坐标将无法告诉我选择了哪个对象。该对象不一定是最顶层的。在这种情况下,我是否组织对象列表以便按 Z 值排序并从上到下比较矩形。这是正确的方法吗?或者是否有任何 UI 框架提供某种组件来继承,以便在发生外部事件时对象会有回调?

4

2 回答 2

2

如果您使用的是 XNA 游戏库,您将不得不使用 Z 值来确定选择了哪个对象。

XNA 的 TouchPanel.GetState() 只会返回手指在屏幕上的位置,它不会告诉你它正在与哪些对象发生碰撞。您必须自己进行所有碰撞检查,您可以通过 Z 或分层顺序来决定要选择哪个对象。

对于 2D 对象,没有任何特定的 Z 顺序应用于它们(因为它们是 2D,而不是 3D),因此您需要向对象的类添加一个属性来处理它。

然后,当您触摸一个位置时,您可以收集该位置碰撞的所有对象,并根据它的 z 顺序选择您想要的任何对象。

希望有帮助!

于 2012-06-11T15:38:22.497 回答
2

这个 XNA 示例应该可以帮助您入门:

http://create.msdn.com/en-US/education/catalog/sample/picking

正如 Nick Funk 所说,您拥有 2D 触摸坐标,那么只需将上述示例应用到您的游戏并使用这些坐标即可。

于 2012-06-11T17:56:54.807 回答