Pygame - 获取动态绘制对象的矩形

时间:2013-09-12 13:13:08

标签: python pygame sprite collision-detection rect

我正在为即将出版的书写一个简单的Pygame教程,我在这里遇到了一些问题。我有两个类,一个球(bola)和一个桨(raquete)。球精灵来自一个图像,它的类很简单:

class bola(pygame.sprite.Sprite):

    def __init__(self, x, y, imagem_bola):
        pygame.sprite.Sprite.__init__(self)
        self.x = x
        self.y = y
        self.image = pygame.image.load(imagem_bola)
        self.rect = self.image.get_rect()

    def imprime(self):
        cenario.blit(self.image, (self.x, self.y))

然而,当球拍的高度和宽度作为参数传递时,球拍会被动态绘制。

class raquete(pygame.sprite.Sprite):

    def __init__(self, x, y, l_raquete, a_raquete):
        pygame.sprite.Sprite.__init__(self)
        self.x = x
        self.y = y
        self.l_raquete = l_raquete
        self.a_raquete = a_raquete
        self.image = pygame.draw.rect(cenario, branco, (self.x, self.y, self.l_raquete, self.a_raquete))
        self.rect = self.image.get_rect()  # this doesn't work!

    def imprime(self):
        pygame.draw.rect(cenario, branco, (self.x, self.y, self.l_raquete, self.a_raquete)) 

如您所见,我尝试使用

加载self.image
pygame.draw.rect(cenario, branco, self.x, self.y, self.l_raquete, self.a_raquete))

然后使用rect获取self.rect = self.image.get_rect()只是不起作用。

当然,由于我无法获得rect的{​​{1}},因此碰撞也无效。

欢迎提供所有提示!

1 个答案:

答案 0 :(得分:1)

只需创建一个新的Surface并用正确的颜色填充它:

class raquete(pygame.sprite.Sprite):

    def __init__(self, x, y, l_raquete, a_raquete):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((l_raquete, a_raquete))
        # I guess branco means color
        self.image.fill(branco) 
        # no need for the x and y members, 
        # since we store the position in self.rect already
        self.rect = self.image.get_rect(x=x, y=y) 

由于您已经在使用Sprite类,所以imprime函数的重点是什么?只需使用pygame.sprite.Group将精灵绘制到屏幕上即可。也就是说,rect的{​​{1}}成员用于定位,因此您可以将Sprite课程简化为:

bola