在图像中,当我在sprite周围添加了一个边界矩形时,红色轨迹是pygame创建的一条轨迹。精灵也是这样做的,最简单的解决方案是在每次重绘后将表面清理为黑色。然而,尝试在整个主表面上这样做并不是一个好主意。我该如何解决这个问题?
答案 0 :(得分: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()。
您可以将函数传递给单个矩形或一系列矩形。一次传递多个矩形比传递更有效 使用单个或部分列表来多次调用更新 矩形。如果传递一系列矩形,则可以安全地包含 列表中没有值,将跳过这些值。
最好与RenderUpdates
结合使用,Sprite.Group
:
<强> pygame.sprite.RenderUpdates 强>
跟踪脏更新的组子类。
RenderUpdates(*sprites) -> RenderUpdates
该类派生自pygame.sprite.Group()。它有一个扩展的draw()方法,可以跟踪屏幕的变化区域。
答案 1 :(得分:1)
只要有一个黑色的矩形和blit,超过你的精灵在前一帧的位置,那应该摆脱它。只要记住在你的精灵blit之前做这个,否则你的新精灵会被部分遮挡掉。
答案 2 :(得分:0)
取屏幕名称。 (对于我的情况,它是屏幕。)并且...... ...
screen.fill((0, 0, 0))
在bliting之前和绘图之后放置它。 (它会产生黑色背景。) 希望这有帮助!
答案 3 :(得分:0)
如果要避免重新绘制整个屏幕,则只需修复受精灵影响的区域。建议您在子画面的上方绘制一个黑色矩形。如果您的背景始终是全黑的,那就行得通。但是,如果有背景图像,则可以仅将背景图像的损坏部分复制回屏幕。
如果背景更具动态性,那么另一种解决方案是在绘制精灵之前复制将要覆盖的屏幕部分,并将其存储在某个位置。然后绘制精灵,必要时翻转屏幕。在移动精灵之前,将背景的已保存部分复制回屏幕,然后再次重复所有操作。