我在四叉树中插入了一堆Tank对象。如果实现了可点击界面,则可以点击其中一些储罐对象。问题是,为了知道点击了什么,我需要查询同一个四叉树,但四叉树中有可点击和不可点击的对象
潜在解决方案:
-
当用户点击屏幕时,我可以使用instanceOf来查看指定区域中的哪些是可点击的,但我听说使用instanceOf是不好的做法。
-
我可以养两棵四叉树。一个用于坦克,一个用于可点击的物体。但后来我可能不得不更新两次实现可点击界面的坦克,因为它们将在两个独立的四叉树中,考虑到我必须更新每一步,而且人们只是偶尔点击屏幕,这会很慢。
-
我只能将可点击的对象插入到四叉树中,并简单地让不可点击的物体定义伪点击方法。这会解决问题,但感觉不对,因为如果某个东西是不可点击的,那么它就不应该从一开始就实现点击方法,即使它是空的。或者这样可以吗?
我认为#3可能是最好的方法,但我不确定。有指针吗?
编辑:现在我想一想,#3在处理重叠点击时会遇到一些问题。如果一个不可点击的tank与一个可点击的tank重叠,并且我在重叠部分点击,除非我调用当时所有内容的所有点击方法,否则我最终可能调用错误tank的点击方法。为了避免这样做,我必须使用instanceOf并找到可点击的对象,然后只调用ITS点击方法。
所以#2可能更好,因为我可以很容易地循环浏览点击区域的所有可点击对象,然后选择位于顶部或最靠近区域中心的对象,只调用tanks点击方法。
也不一定是它们重叠,而是紧密地结合在一起。如果我让这个游戏基于触摸,你的手指不是一个点,而是一个区域,所以最好在一个区域中的对象中循环,找到最接近的可点击对象,如果不筛选一堆不可点击的对象,3#很难做到这一点。
#3听起来不错。你可以通过创建另一个所有对象都实现的接口来增强它,例如"GameObject",它有一个方法"isClickable"。然后,您可以让您的可点击对象实现isClickable的"return true"。