有没有办法将 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
.
简答:
除非你自己实现,否则你想做的事是不可能的。
您不能将该标志传递给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.LayeredUpdates
或pygame.sprite.RenderUpdates
做同样的事情,你必须自己实现这些对象的所有绘图功能。