【问题标题】:How do I draw part of the sprite image using pygame spritegroups?如何使用 pygame spritegroups 绘制部分精灵图像?
【发布时间】:2021-05-09 05:18:38
【问题描述】:

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

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

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

self.all_sprites.draw(screen)

如何使用 pygame spritegroups 实现这一点?此外,所有精灵都没有绘制方法。

【问题讨论】:

    标签: python pygame sprite draw


    【解决方案1】:

    您可以使用subsurface 方法定义直接链接到源表面的子表面:

    subsurface(Rect) -> Surface

    返回一个与其新父级共享其像素的新 Surface。新 Surface 被视为原始 Surface 的子级。对任一 Surface 像素的修改都会相互影响。

    在构造函数中创建一次次表面,或者在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.Sprites 的imagerect 属性来绘制对象。

    【讨论】:

    • 哇,再次感谢。它正在工作,但是错误的方式,但我很确定我可以解决这个问题。我昨天在这里看到了你的碰撞和遮罩的东西,那是一些高质量的东西。这是为了我正在慢慢完成的拍摄。这和前几天入侵者的事情有点不同,哈哈。
    • 搞定了!看起来很新鲜,再次感谢!
    猜你喜欢
    • 2022-08-13
    • 2023-01-04
    • 2018-03-26
    • 2013-01-29
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多