Pygame rect.contains碰撞未检测到

时间:2016-12-29 02:02:08

标签: python pygame collision-detection

我正在制作一个简单的Breakout / Arkanoid游戏来学习pygame。我遇到了桨和球的矩形没有正确碰撞的问题。我还注意到,如果我在两块砖之间射球,球不会碰到砖块,即使球形精灵在视觉上与砖块重叠。这个片段来自球的.update方法,它通过球拍和砖块列表。

    new_pos = self.__calc_pos()

    # Check for collision with walls
    if not self.area.contains(new_pos):
        self.angle = -self.angle
        new_pos = self.__calc_pos()
    else:
        # Check for collision with paddle
        if paddle.rect.contains(new_pos):
            self.angle = -self.angle
            new_pos = self.__calc_pos()

        # Check for collision with bricks
        for brick in bricks:
            if brick.rect.contains(new_pos):
                self.angle = -self.angle
                new_pos = self.__calc_pos()
                brick.kill()
                bricks.remove(brick)

    self.rect = new_pos

.__calc_pos方法:

def __calc_pos(self):
    new_x = int(math.cos(math.radians(self.angle))) * self.speed
    new_y = -int(math.sin(math.radians(self.angle))) * self.speed
    return self.rect.move(new_x, new_y)

1 个答案:

答案 0 :(得分:1)

contains()检查一个矩形是否完全位于另一个矩形内 - 如果一个对象仅部分接触其他对象,则它不会为真。使用colliderect()

  

<强>包含()
     测试一个矩形是否在另一个矩形内       contains(Rect) - &gt;布尔
     当参数完全位于 Rect。

时,返回true

-

  

<强> colliderect()
     测试两个矩形是否重叠      colliderect(Rect) - &gt;布尔
     如果任一矩形的任何部分重叠(顶部+底部或左侧+右侧边缘除外),则返回true。