我正在制作一个2D游戏,我已经创建了两个圆圈,一个名为玩家,另一个名为敌人。圆是通过调用drawPlayerCircle和drawEnemyCircle函数来绘制的,这两个函数都是在我的display()函数中调用的。目前,我的项目不是面向对象的,这一点你可能已经看出来了。我的碰撞适用于两个圆,因为我已经计算了穿透向量和归一化向量等。然而,我的问题是,通过在游戏中有10-20个敌人来进一步扩展这个游戏,我如何才能快速计算出与每个单一敌人的碰撞,而不是手动计算我的玩家和游戏中每个敌人之间的渗透和归一化矢量,这显然是非常低效的。我猜是将我的玩家和敌人的实体分成各自的类,但我仍然在努力想象碰撞是如何工作的。
我们将非常感谢您的帮助!:)
发布于 2016-02-26 19:40:08
两个圆之间的碰撞测试起来非常快。只要检查圆中心点之间的距离是否小于两个半径之和即可。
首先,我会将玩家与其他所有敌人进行比较。进行20次比较不会对过去10年的任何一台计算机造成负担。我非常相信,只要编写你现在需要的代码,不要让事情变得复杂,特别是当你刚刚开始的时候。
然而,如果你最终拥有数百万个圆圈,并且你已经分析了你的代码,并发现测试所有圆圈的速度很慢,那么有相当多的选择。最简单的方法可能是在游戏区域上设置一个网格。
每个网格单元覆盖播放区域上固定数量的空间,并存储圆圈列表。当一个圆移动时,计算它应该在哪个网格单元中。将其从当前所在的网格单元中删除,并将其添加到应该所在的网格单元中。然后,您可以只比较与玩家的网格单元重叠的圆。
发布于 2016-02-26 22:13:11
Space partitioning.具体地说,如果你是在2D环境中,你可以使用quadtree来加速碰撞检测。
https://stackoverflow.com/questions/35650404
复制相似问题