【发布时间】:2016-02-26 11:22:13
【问题描述】:
我正在制作一个 2D 游戏,我创建了两个圆圈,一个命名为玩家,一个命名为敌人。圆圈是通过调用 drawPlayerCircle 和 drawEnemyCircle 函数绘制的,这两个函数都在我的 display() 函数中调用。目前我的项目不是面向对象的,你可能已经知道了。我的碰撞适用于两个圆圈,因为我已经计算了穿透向量和归一化向量等......但是我的问题是,通过在游戏中拥有 10-20 个敌人来进一步扩展这个游戏,我怎样才能快速计算出与每个敌人的碰撞而不是手动计算我的玩家和游戏中每个敌人之间的穿透和归一化向量,这显然是非常低效的。我猜想将我的玩家和敌人实体分成他们自己的类,但我仍在努力想象碰撞将如何工作。
任何帮助将不胜感激! :)
【问题讨论】:
-
既然是圆形,要检测碰撞,您只需检查中心之间的距离是否小于 r1+r2。因此,一次检查需要两次减法、三次乘法、两次加法和一次比较。
-
我了解碰撞背后的数学如何与两个圆半径一起工作'但我的问题是如何以最有效的方式扩展它,以便我的程序跟踪玩家和所有敌人之间的距离
-
如果你只想检查与玩家的碰撞,我会说有 10-20 个敌人,只在列表中比较它们会很有效。您当然可以在进行乘法之前添加一些检查,但它们可能不值得。如果每个人的半径都相同,那么计算就更简单了,所以任何花哨的东西都可能不值得。无论如何,您只需要检查运动。
标签: c++ collision-detection collision geometry