无法更新 pygame 个表面

Failing to update pygame surfaces

我正在制作 pygame 游戏。我有 3 个表面:gameDisplay(角色和背景直接渲染到的地方)、guiSurfinvSurf 我有一个用核心 pyhon 制作的时钟,它使用 pygame 字体显示游戏时间。我将时钟 blit 到 guiSurf,然后在我的 gameloop 中我将 guiSurfinvSurf blit 到 gameDisplay。我的问题是时钟在它原来的地方留下了痕迹。 IE 当它从 '07:00' 变为 '07:01' 时,'01' 位于不应存在的 '00' 之上。我会 post 代码,但有 400 行。有谁知道我可能做错了什么。 Link to a picture of the clock

确保您 'clear' 通过在文本所在的位置上 blit 另一个图像来确保正在打印时间的区域。当您将表面绘制到屏幕上时,它会简单地变成一个 'surface',它总是被绘制直到被其他东西覆盖。您需要先清除此表面,然后再将其他内容写入它,否则您会得到您所看到的效果。通过在每个游戏滴答开始时简单地调用 display_name.fill((0,0,0)),您将 'clear' 屏幕,然后在没有溢出效果的情况下重新绘制文本。当然,您必须每次都将所有内容重新写入屏幕,但这应该不是问题,除非您需要写入数千个项目。如果你不想重绘一切,那么在文本上blit一个小矩形,然后重绘,你的问题应该就解决了。

我希望这能帮助您解决问题并祝您编码愉快!

可见,时钟在 guiSurf 上被 blit 了两次。我猜它一直在叠加之前的时间图像(7:00,然后是 7:01,然后是 7.02,依此类推)。在将时间写入其中之前,您需要清除放置时钟的表面:clock_surf.fill(clearcolor, clock_surf.get_rect()).