在一个只是为了好玩的项目中,我遇到了一些问题。
有一个由圆球、尖三角形和细线(还有其他野生动物)组成的二维世界。它们都是WorldCreatures的子类,可以在这个世界中移动。当它们相遇时,就会发生碰撞。
我想要做的事情是找到一种检测它们之间碰撞的方法。现在我的思路如下:
- 对于Ball-Ball,我只需计算它们位置之间的距离,并将其与它们“大小”的总和进行比较。 - Ball与世界边缘之间的碰撞也很简单,我只需检查它们之间的距离,在笛卡尔坐标系中很容易实现。 - 更一般的问题是如何检测线(从某些点开始和结束)或其他可能存在的对象之间的碰撞?线和点之间的距离也可以轻松计算,但我想要的是一种通用的方式来判断对象A是否与对象B发生碰撞。目前的代码看起来有些像这样:
现在,碰撞检测机制应该取决于哪些对象可以发生碰撞。效果也是如此。
我是否应该仅在内存中保留所有对象的列表,并在每一步中循环遍历它们?或者,有没有更好的方法来提高此任务的性能?
有一个由圆球、尖三角形和细线(还有其他野生动物)组成的二维世界。它们都是WorldCreatures的子类,可以在这个世界中移动。当它们相遇时,就会发生碰撞。
我想要做的事情是找到一种检测它们之间碰撞的方法。现在我的思路如下:
- 对于Ball-Ball,我只需计算它们位置之间的距离,并将其与它们“大小”的总和进行比较。 - Ball与世界边缘之间的碰撞也很简单,我只需检查它们之间的距离,在笛卡尔坐标系中很容易实现。 - 更一般的问题是如何检测线(从某些点开始和结束)或其他可能存在的对象之间的碰撞?线和点之间的距离也可以轻松计算,但我想要的是一种通用的方式来判断对象A是否与对象B发生碰撞。目前的代码看起来有些像这样:
class WorldCreature:
def detectCollision(self, otherObject):
# do something
if collision:
self.onCollision(otherObject)
otherObject.onCollision(self)
class Ball(WorldCreature):
# someing here
class Line(WorldCreature):
# someing here
现在,碰撞检测机制应该取决于哪些对象可以发生碰撞。效果也是如此。
我是否应该仅在内存中保留所有对象的列表,并在每一步中循环遍历它们?或者,有没有更好的方法来提高此任务的性能?