我正在寻找一种好的算法来检测移动的球是否接触静态墙或静态目标。经典的射击游戏逻辑。任何人都看到了一个好的算法,而不仅仅是将它们全部循环?
编辑:我不知道哪个是最好的解决方案,BSP树或基于网格的计算,但我的实现将是在JavaScript上并控制在画布中移动对象,如果它击中某些东西,那么炮弹将会被摧毁,所以我认为每个发射的炮弹都需要一棵BSP树。答案 0 :(得分:1)
由于您已经知道静态对象的位置,因此可以将其位置编码为BSP或kd-tree。然后,随着球的位置移动,您可以在BSP或kd树中跟踪对象的位置,并仅与树中相同节点内的对象进行比较。
总体思路是在开始进行测试之前构建二叉树。这种数据结构使得定位“附近”物体变得更加容易 - 因为您减少了测试碰撞的物体数量,所以可以加快整体检测速度。
答案 1 :(得分:1)
我同意wickedchicken的想法是最好的。我只是建议采用另一种方法。
我在编写类似游戏(多年前)时所做的是将游戏区域划分为N * N网格。现在,为了检查是否发生碰撞,我只检查了与球在同一网格中的对象或与该正方形相邻的8个方格中的任何一个。仔细选择N的值可以非常快。
当然,如果所有对象在游戏区域内或多或少地均匀分布,这只会产生良好的效果。但当时这种方法对我来说比编写更复杂的数据结构更容易(我还在高中,只是学习编程)。
答案 2 :(得分:0)
由于墙/目标没有移动,你没有比较球相互碰撞(对吗?),你必须每一帧都绕过每一个球移动它,你最好只检查每一个每一帧碰撞球(如果碰撞很复杂,你可以按近似距离过滤)。
这比保留BSP树更快,更容易编写。