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