假设我有多个对象相互叠加,如果我点击其中一个,TouchPanel.GetState()返回的坐标将无法告诉我选择了哪个对象。对象不是最重要的对象。在这种情况下,我是否组织对象列表以便按Z值排序并从上到下比较矩形。这是正确的方法吗?或者,是否有任何UI框架提供某种类型的组件来继承,以便在发生外部事件时对象将具有回调?
答案 0 :(得分:2)
如果您正在使用XNA游戏库,则必须使用Z值来确定选择了哪个对象。
XNA的TouchPanel.GetState()只会返回屏幕上手指的位置,它不会告诉你它与哪些物体发生碰撞。您必须自己进行所有碰撞检查,这是您可以通过Z或分层顺序决定的,您想要选择哪个对象。
对于2D对象,没有任何特定的Z顺序应用于它们(因为它们是2D而不是3D),因此您需要添加一个属性来处理对象的类。
然后当你触摸一个位置时,你可以收集位置碰撞的所有物体,并根据它的z顺序选择你想要的任何物体。
希望有所帮助!
答案 1 :(得分:2)
这个XNA示例可以帮助您入门:
http://create.msdn.com/en-US/education/catalog/sample/picking
正如Nick Funk所说,你有2D触摸坐标,那么只需将上述样本应用到你的游戏中并使用这些坐标。