python 精灵列表是如何工作的?我可以将精灵坐标添加到列表中吗?

How does the python sprite list work? Can i add sprite coords to the list?

亲爱的朋友们您好, 对于我的 python 项目,我制作了一个按钮 class - 以及它们的图像、坐标、动作等等 - 一切正常。但我想我会在游戏中添加很多按钮,所以我决定将它们添加到一个 pygame 精灵组及其坐标,并使用 for 循环自动 blit。


 for oge in buttonList:
    pygame.blit(oge, (x, y)


有什么方法可以将 sprite 及其坐标添加到组或列表中,将它们一起 blit 到一起?

简答:

如果每个精灵都有属性.rect.image,那么可以调用.draw():

buttonList.draw(surf)

长答案:

A pygame.sprite.Sprite object should have a .rect property of type pygame.Rect 此属性定义精灵的位置(和大小)。

下面我假设 buttonListpygame.sprite.Group.
Group 中的每个 Sprite shuold 都有一个 .rect 属性 用于在其位置绘制 sprite 例如:

class MySprite(pygame.sprite.Sprite):

    def __init__(self):
        super().__init__() 

        self.image = [...]
        self.rect  = self.image.get_rect()

组内所有精灵都可以随叫随到绘制。参数 surf 可以是任何表面,例如显示面:

buttonList.draw(surf)

请注意,pygame.sprite.Groupdraw() 方法将包含的 Sprites 绘制到 Surface 上。每个精灵的 .image.rect.

位置 "blit"

pygame.Rect 有很多虚拟属性,用来设置它的位置(和大小),例如.center.topleft。使用它们来设置精灵的位置:

mysprite = MySprite()
mysprite.rect.topleft = (x, y)

当然,位置(x, y)也可以作为精灵构造函数的参数class:

class MySprite(pygame.sprite.Sprite):

    def __init__(self, x, y):
        super().__init__() 

        self.image = [...]
        self.rect  = self.image.get_rect(topleft = (x, y))

mysprite = MySprite(x, y)