Python (pygame)显示以前存在而不是背景的副本的空方块

Python (pygame)显示以前存在而不是背景的副本的空方块,python,pygame,sprite,rect,Python,Pygame,Sprite,Rect,我做了一个2D项目,有很多瓷砖精灵和一个玩家精灵。我试着让相机跟随玩家,大部分时间都在工作。但是,有一个问题: 如果转到地图的边缘,它会正常滚动,但不会显示黑色背景,而是在地图边缘而不是背景(黑色)上显示精灵的副本。如果我将一些方块留空,它也会出现同样的问题,当我移动时,它会显示先前存在的平铺的副本 摄像机的工作原理如下: 选择应可见的精灵 对它们执行sprite.visible=1,对所有其他精灵执行sprite.visible=0 将所有精灵的位置sprite.rect设置为coords-

我做了一个2D项目,有很多瓷砖精灵和一个玩家精灵。我试着让相机跟随玩家,大部分时间都在工作。但是,有一个问题:
如果转到地图的边缘,它会正常滚动,但不会显示黑色背景,而是在地图边缘而不是背景(黑色)上显示精灵的副本。如果我将一些方块留空,它也会出现同样的问题,当我移动时,它会显示先前存在的平铺的副本

摄像机的工作原理如下:

  • 选择应可见的精灵
  • 对它们执行
    sprite.visible=1
    ,对所有其他精灵执行
    sprite.visible=0
  • 将所有精灵的位置
    sprite.rect
    设置为
    coords-offset
  • 更新屏幕(我使用
    flip()
    ,因为相机每转一圈都会移动,所以每转一圈都必须更新整个屏幕)
所有
dirtysprite
都有
dirty=2

有人知道为什么它在边缘而不是背景上显示精灵的副本吗


谢谢你的帮助

除非手动清除屏幕表面,否则flip不会更改其内容

因此,如果忽略绘制到某个位置,它将保持不变

如果你想摆脱这种通常被称为“镜厅”的效果,你必须跟踪屏幕的哪些部分还没有被画出来,然后自己画出来

在地图轮廓周围定义背景精灵并阻止相机走得太远可能会更容易


由于您使用“脏/干净”方法仅重新绘制更改的内容,因此在绘制帧之前,您将无法选择仅填充整个屏幕表面,因为这将覆盖自上一帧以来保持不变的任何内容。

谢谢!使用背景精灵的方法很有效,并且没有太多额外的工作。