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

Posted

技术标签:

【中文标题】Pygame - 为动态绘制的对象获取矩形【英文标题】:Pygame - Getting a rectangle for a dynamically drawn object 【发布时间】:2013-09-12 13:13:07 【问题描述】:

我正在为即将出版的一本书写一个简单的 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))

然后使用self.rect = self.image.get_rect() 获取rect 是行不通的。

当然,由于我无法为raquete 获得rect,因此碰撞也不起作用。

欢迎所有提示!

【问题讨论】:

【参考方案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 将您的精灵绘制到屏幕上。也就是说,Spriterect 成员用于定位,因此您可以将 bola 类简化为:

class bola(pygame.sprite.Sprite):

    def __init__(self, x, y, imagem_bola):
        pygame.sprite.Sprite.__init__(self)
        # always call convert() on loaded images
        # so the surface will have the right pixel format
        self.image = pygame.image.load(imagem_bola).convert()
        self.rect = self.image.get_rect(x=x, y=y)

【讨论】:

谢谢,多米尼克! Surface 可以解决问题。我仍然想知道是否有办法从使用 pygame.draw 构建的对象中获取矩形 ...

以上是关于Pygame - 为动态绘制的对象获取矩形的主要内容,如果未能解决你的问题,请参考以下文章

pygame学习之绘制移动的矩形

它不会绘制我的矩形(pydroid 上的 pygame)

如何保存在pygame中代替矩形的所有像素?

用pygame绘图后如何配置矩形?

通过 ID 动态获取可绘制对象

如何在pygame中围绕精灵或图像绘制边框?