Python (pygame)显示以前存在而不是背景的副本的空方块
我做了一个2D项目,有很多瓷砖精灵和一个玩家精灵。我试着让相机跟随玩家,大部分时间都在工作。但是,有一个问题:Python (pygame)显示以前存在而不是背景的副本的空方块,python,pygame,sprite,rect,Python,Pygame,Sprite,Rect,我做了一个2D项目,有很多瓷砖精灵和一个玩家精灵。我试着让相机跟随玩家,大部分时间都在工作。但是,有一个问题: 如果转到地图的边缘,它会正常滚动,但不会显示黑色背景,而是在地图边缘而不是背景(黑色)上显示精灵的副本。如果我将一些方块留空,它也会出现同样的问题,当我移动时,它会显示先前存在的平铺的副本 摄像机的工作原理如下: 选择应可见的精灵 对它们执行sprite.visible=1,对所有其他精灵执行sprite.visible=0 将所有精灵的位置sprite.rect设置为coords-
如果转到地图的边缘,它会正常滚动,但不会显示黑色背景,而是在地图边缘而不是背景(黑色)上显示精灵的副本。如果我将一些方块留空,它也会出现同样的问题,当我移动时,它会显示先前存在的平铺的副本 摄像机的工作原理如下:
- 选择应可见的精灵
- 对它们执行
,对所有其他精灵执行sprite.visible=1
sprite.visible=0
- 将所有精灵的位置
设置为sprite.rect
coords-offset
- 更新屏幕(我使用
,因为相机每转一圈都会移动,所以每转一圈都必须更新整个屏幕)flip()
dirtysprite
都有dirty=2
有人知道为什么它在边缘而不是背景上显示精灵的副本吗
谢谢你的帮助 除非手动清除屏幕表面,否则flip不会更改其内容 因此,如果忽略绘制到某个位置,它将保持不变 如果你想摆脱这种通常被称为“镜厅”的效果,你必须跟踪屏幕的哪些部分还没有被画出来,然后自己画出来 在地图轮廓周围定义背景精灵并阻止相机走得太远可能会更容易
由于您使用“脏/干净”方法仅重新绘制更改的内容,因此在绘制帧之前,您将无法选择仅填充整个屏幕表面,因为这将覆盖自上一帧以来保持不变的任何内容。谢谢!使用背景精灵的方法很有效,并且没有太多额外的工作。