Pygame如何修复'尾随像素'?

问题描述 投票:3回答:4

在图像中,当我在sprite周围添加了一个边界矩形时,红色轨迹是pygame创建的一条轨迹。精灵也是这样做的,最简单的解决方案是在每次重绘后将表面清理为黑色。然而,尝试在整个主表面上这样做并不是一个好主意。我怎样才能解决这个问题?

pygame draw
4个回答
2
投票

通常你会这样做:

def draw():
    # fill screen with solid color.
    # draw, and flip/update screen.

但是,您只能更新屏幕的脏部分。见pygame.display.update()

pygame.display.update() 更新屏幕的部分以显示软件 update(rectangle=None) -> None update(rectangle_list) -> None

此功能类似于用于软件显示的pygame.display.flip()的优化版本。它只允许更新屏幕的一部分,而不是整个区域。如果没有传递参数,它会更新整个Surface区域,如pygame.display.flip()。

您可以将函数传递给单个矩形或一系列矩形。一次传递多个矩形比使用单个或部分矩形列表多次调用更新更有效。如果传递一系列矩形,则可以安全地在列表中包含None值,这将被跳过。

最好将它与RenderUpdates结合使用,这是一个Sprite.Group

pygame.sprite.RenderUpdates 跟踪脏更新的组子类。 RenderUpdates(*sprites) -> RenderUpdates 该类派生自pygame.sprite.Group()。它有一个扩展的draw()方法,可以跟踪屏幕的变化区域。


1
投票

只要有一个黑色矩形和blit,超过你的精灵在前一帧的位置,那应该摆脱它。只要记住在你的精灵blit之前这样做,否则你的新精灵会被部分遮挡掉。


0
投票

取名屏幕。 (对于我的情况,它的屏幕。)并做...

screen.fill((0, 0, 0))

把它放在bliting之前和绘图之后。 (它会产生黑色背景。)希望这有帮助!


0
投票

如果你想避免重绘整个屏幕,那么只需修复你的精灵“损坏”的区域。已经建议在你的精灵所在的地方画一个黑色矩形。如果您的背景总是完全黑,那就有效。但是,如果有背景图像,则可以将背景图像的损坏部分复制回屏幕。

如果背景更加动态,那么另一种解决方案是在绘制精灵之前复制用精灵覆盖的屏幕部分,并将其存储在某处。然后绘制精灵,并在必要时翻转屏幕。在移动精灵之前,将保存的背景部分复制回屏幕,然后重复所有这些。

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