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

时间:2011-06-26 23:51:16

标签: pygame draw

enter image description here

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

4 个答案:

答案 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)

如果要避免重新绘制整个屏幕,则只需修复受精灵影响的区域。建议您在子画面的上方绘制一个黑色矩形。如果您的背景始终是全黑的,那就行得通。但是,如果有背景图像,则可以仅将背景图像的损坏部分复制回屏幕。

如果背景更具动态性,那么另一种解决方案是在绘制精灵之前复制将要覆盖的屏幕部分,并将其存储在某个位置。然后绘制精灵,必要时翻转屏幕。在移动精灵之前,将背景的已保存部分复制回屏幕,然后再次重复所有操作。