我有一两个问题。我正在使用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)如果我完全关闭/有更好的方法来做碰撞,检测,绘图等等。请,我都是耳朵。
答案 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
可能有更好的解决方案。