pygame:像素与线条的完美碰撞?

时间:2012-05-31 18:24:21

标签: python pygame linear-algebra collision pixel-perfect

我有一两个问题。我正在使用Pygame创建一个绘图游戏。

我们有球在一个表面上反弹,互相撞击墙壁。使用鼠标,您可以绘制直线,球反弹也会反弹。

使用pygame.image绘制球,因为我们有一个ball.png覆盖球的Surface和Rect。但对于这些行我们只是使用pygame.draw.line()返回简单的矩形。

我目前最大的问题是:

我选择在自己的Surface对象上绘制每一行,然后将它们放到更大的“游戏画布”上。这是因为我想使用here提供的像素完美碰撞检测,以及surfarray.array_colorkey(),为此我需要一个底层Surface(球具有pygame.image返回的图像Surface)。我想要一个Surface用于线条,这样我就可以使用碰撞算法的透明度方面,否则球会从包裹线条的Rects反弹。

Q1)有没有更好的画线方法?我想使用类似于图像或Sprite的东西。有这样的事吗?

Q2)如果不是,我应该如何为每条线创建Surface,以便使用“游戏画布”中的坐标将线条绘制到较小的Surface上相对容易,线条不会被切断上面描述的像素完美碰撞有效吗?

Q3)如果我完全关闭/有更好的方法来做碰撞,检测,绘图等等。请,我都是耳朵。

1 个答案:

答案 0 :(得分:1)

圆上线的每像素碰撞是过度杀伤。

有关圆和线的2d碰撞的信息: 2D collision between a moving circle and a fixed line segment

并且euclid发生Circle.intersect( Line2 )次碰撞: http://partiallydisassembled.net/euclid/point2.html#SECTION002530000000000000000

numpy可能有更好的解决方案。