0

我将一堆 Tank 对象插入到四叉树中。如果这些坦克对象中的一些实现了 Clickable 接口,则可以单击它们。问题是,为了知道点击了什么,我需要查询同一个四叉树,但是四叉树中既有可点击的对象,也有不可点击的对象。

潜在的解决方案:

  1. 当用户单击屏幕时,我可以使用 instanceOf 查看指定区域中的哪些是可点击的,但我听说使用 instanceOf 是不好的做法。

  2. 我可以维护两个四叉树。一种仅用于坦克,另一种用于可点击对象。但随后我可能不得不更新实现可点击界面 TWICE 的坦克,因为它们将位于两个单独的四叉树中,考虑到我必须更新每一步,这会很慢,而且人们只经常点击屏幕。

  3. 我只能将可点击对象插入四叉树,并简单地让不可点击对象定义虚拟点击方法。这将解决问题,但感觉不对,因为如果某些东西是不可点击的,那么即使它是空的,也不应该从一开始就实现点击方法。或者这样可以吗?

我在想#3 可能是最好的方法,但我不确定。任何指针?

编辑:现在我想起来了,#3 在处理重叠点击时会遇到一些问题。如果一个不可点击的坦克与一个可点击的坦克重叠,并且我点击了重叠部分,除非我当时为所有内容调用所有点击方法,否则我最终可能会调用错误坦克的点击方法。为了避免这样做,我必须使用 instanceOf 并找到可点击的对象,并且只调用它的 click 方法。

所以也许#2 更好,因为我可以轻松地循环浏览点击区域的所有可点击对象,然后选择位于顶部或最靠近区域中心的对象,然后只调用该坦克点击方法。

也不一定是它们重叠,而只是靠近在一起。如果我要让这个游戏基于触摸,你的手指不是一个点,而是一个区域,所以最好在一个区域内循环遍历对象并找到最近的可点击对象,这很难做到 3#无需筛选一堆不可点击的对象。

4

1 回答 1

2

#3 听起来不错。您可以通过创建所有对象都实现的另一个接口来增强它,例如“GameObject”,它有一个方法“isClickable”。然后你可以让你的可点击对象为 isClickable 实现一个“return true”。

于 2013-06-25T15:47:44.650 回答