如何使用 pygame 精灵组绘制精灵图像的一部分?

How do I draw part of the sprite image using pygame spritegroups?

我想画出精灵图的一部分慢慢显露出来。如果我处理平局,我会这样做:

def draw(self, screen):
    screen.blit(self.image, self.rect, self.viewport)

并在对象更新方法中更改视口大小。我尝试将其添加到代码中,但它只显示了整个图像。更新肯定是由 spritegroup 更新方法调用的,视口矩形正在正确更新,在游戏抽奖中我有:

self.all_sprites.draw(screen)

如何使用 pygame 精灵组实现此目的?此外,none 个精灵具有绘制方法。

您可以使用方法 subsurface:

定义直接链接到源表面的次表面

subsurface(Rect) -> Surface

Returns a new Surface that shares its pixels with its new parent. The new Surface is considered a child of the original. Modifications to either Surface pixels will effect each other.

在构造函数中创建一次 subsurface 或在 update 方法中连续创建。例如:

class SpriteObject(pygame.sprite.Sprite):

    def __init__(self, image):
        # [...]

        self.complete_image = image 
        
    def update(self):
        self.image = self.complete_image.subsurface(self.viewport)

现在您不再需要 draw 方法,可以使用 self.all_sprites.draw(screen),因为 image 属性是整个图像的次表面。 pygame.sprite.Group.draw() 使用包含的 pygame.sprite.Spriteimagerect 属性来绘制对象。