我正在精灵表面上使用surface.fill(color, rect)
绘制一个小的彩色方块,然后按照以下顺序显示在其他表面的顶部:
目前我遇到一个问题,我的精灵在屏幕上涂抹,因为我不是每次都擦屏。 如何在保持精灵图层覆盖其他图层的同时消除这种拖尾效应?
图层代码 - 已初始化,但未在每一帧更新。
game_surface = pygame.Surface((self.canvas.get_size()))
game_surface = game_surface.convert()
game_surface.fill((0,0,255))
maze_surface = pygame.Surface((self.canvas.get_size()))
maze_surface = maze_surface.convert_alpha()
maze_surface.fill((0,0,255,0))
play_surface = pygame.Surface((self.canvas.get_size()))
play_surface = play_surface.convert_alpha()
play_surface.fill((0,0,0,0))
目前只有play_surface
实际上实际使用了透明度,但最终play_surface
和maze_surface
都需要透明。
Sprites图层更新 - 每次移动精灵时调用。
def update(self, canvas):
# move sprite if keys pressed (not shown)
self.surface.fill((0,0,0,0)) # Newest screen fill attempt. Causes smearing effect
self.surface.fill(self.color, self.rect) # draw green square
canvas.blit(self.surface, (0,0))
涂抹效果:红色= maze_layer
,绿色=涂抹精灵
替代精灵填充 - 上述
def update(self, canvas):
# move sprite if keys pressed (not shown)
self.surface.fill((0,0,0)) # Original screen fill. Covers up lower layers
self.surface.fill(self.color, self.rect) # draw green square
canvas.blit(self.surface, (0,0))
非透明度 - 黑色=填充颜色(我希望这样做而不会遮盖其他图层)
如何在保持精灵层覆盖其他层(图2)的同时消除这种拖尾效应(图1)?非常感谢任何帮助。
答案 0 :(得分:0)
你需要重新绘制精灵所覆盖的背景,更新它们的位置,然后将精灵重新绘制到新的位置。
您可能有兴趣探索内置支持此功能的pygame.sprite
模块。您可以创建pygame.sprite.Sprite
的子类:
update(self)
方法(可选)self.image
和self.rect
属性pygame.sprite.Group
个实例 Pygame的sprite组类(例如Group
,GroupSingle
,LayeredUpdates
等)包括pygame.sprite.Group.clear(surface_dest, background)
等方法(请参阅documentation)以方便在移动之前重新绘制精灵上的背景图像并在其他地方重新绘制它们的任务。