将 `special_flags` 参数传递给 pygame 中的 group.draw

问题描述 投票:0回答:1

有没有办法将 special_flags 参数传递给 Group.draw 以便它使用这些标志调用 .blit 方法? 我试过像这样将它作为关键字参数传递:

group.draw(surface, special_flags=pygame.BLEND_SOURCE_ALPHA)

但它给出了这个错误:

Traceback (most recent call last):
  File "C:\Users\MarciAdam\PycharmProjects\pygame_stuff_1\main.py", line 394, in <module>
    group.draw(surface, special_flags=pygame.BLEND_RGBA_MAX)
TypeError: draw() got an unexpected keyword argument 'special_flags'

我知道我可以做这样的事情:

for sprite in group.sprites():
    surface.blit(sprite.image, sprite.rect, special_flags=pygame.BLEND_SOURCE_ALPHA)

但是我需要为更复杂的组类型复制很多 pygame 代码,例如。 LayeredUpdates.

python pygame drawing pygame-surface group
1个回答
0
投票

简答:

除非你自己实现,否则你想做的事是不可能的。

您不能将该标志传递给pygame.sprite.Group.draw,因为该函数只有 1 个参数(另请参阅What does pygame.sprite.Group() do):

draw(Surface) -> List[Rect]


建议:

唯一的方法是用“for”循环绘制精灵。我建议为此编写一个函数或实现您自己的派生自 MyGroup:

pygame.sprite.Group
class MyGroup(pygame.sprite.Group):
    def __init__(self, *args):
        super().__init__(*args) 
    def draw(self, surface, special_flags=0):
        for sprite in self:
            surface.blit(sprite.image, sprite.rect, special_flags = special_flags)
group = MyGroup()
group.draw(surface, special_flags=pygame.BLEND_RGBA_MAX)

如果你想对pygame.sprite.LayeredUpdatespygame.sprite.RenderUpdates做同样的事情,你必须自己实现这些对象的所有绘图功能。

© www.soinside.com 2019 - 2024. All rights reserved.