【发布时间】:2011-05-24 23:25:16
【问题描述】:
我目前正在开发 2D 射击类型的游戏,并且我正在使用四叉树进行碰撞检测。我编写了一个工作四叉树,可以正确地将我的演员推入它们在树中所属的节点/叶子中。但是,我遇到了一些问题。
首先,我如何实际使用我的四叉树来选择一个对象应该针对哪些其他对象测试碰撞?我不确定这是如何完成的。
这就引出了第二个问题。假设我在节点中有一个对象不是另一个节点的邻居,但是该对象足够大以至于它跨越了几个节点,我如何检查实际的碰撞,因为我猜测树可能认为它不是足够接近以与“远处”节点中的对象发生碰撞?不完全适合节点的对象是否应该保留在父节点中?
在我的游戏中,大多数物体大小不一,并且四处移动。
我已经阅读了大量关于四叉树的博客/文章,但大多数只是解释了如何构建一棵树,而这并不是我真正想要的。
欢迎任何帮助/信息。
【问题讨论】:
-
如果你制作的游戏真的很像你链接的视频,那是你根本不应该使用空间索引,一个未排序的实体列表可能会更快,最多移动几百个对象。
-
取决于我认为的碰撞......可能对于基于圆的碰撞,可能不是基于像素的碰撞。此外,对于较少数量的对象,在一维排序的实体列表中查找邻居通常是最快的,IIRC。但是对于纯粹的经验来说,实现一个工作四叉树是值得的。 (而且,子弹地狱趋势射击游戏可以轻松拥有数百个移动物体:))
标签: c++ data-structures collision-detection quadtree