【问题标题】:Failing to update pygame surfaces无法更新 pygame 表面
【发布时间】:2017-01-25 20:56:53
【问题描述】:
我正在制作一个 pygame 游戏。我有 3 个表面:gameDisplay(直接渲染角色和背景)、guiSurf 和 invSurf
我有一个核心 pyhon 制作的时钟,它使用 pygame 字体显示游戏时间。我将时钟转为guiSurf,然后在我的游戏循环中我将guiSurf 和invSurf 转为gameDisplay。我的问题是时钟在原来的地方留下了痕迹。 IE 当它从“07:00”变为“07:01”时,“01”位于不应该存在的“00”之上。我会发布代码,但有 400 行。有谁知道我可能做错了什么。 Link to a picture of the clock
【问题讨论】:
标签:
python
python-3.x
pygame
python-3.5
pygame-surface
【解决方案1】:
确保通过在文本所在的位置上添加另一个图像来“清除”打印时间的区域。当您将表面绘制到屏幕上时,它只是成为一个始终绘制的“表面”,直到被其他东西覆盖。你需要先清除这个表面,然后再将其他东西粘贴到它上面,否则你会得到你看到的效果。通过在每个游戏开始时简单地调用 display_name.fill((0,0,0)),您将“清除”屏幕,然后在屏幕上重新绘制文本,而不会产生溢出效应。当然,您必须在每次滴答时将所有内容重新传输到屏幕上,但这应该不是问题,除非您需要传输数千个项目。如果您不想重绘所有内容,请在文本上绘制一个小矩形,然后重绘它,您的问题应该会得到解决。
我希望这可以帮助您解决问题并祝您编码愉快!
【解决方案2】:
显然,guiSurf 上的时钟被 blitted 两次。而且我猜它会不断堆叠之前的时间图像(7:00,然后是 7:01,然后是 7.02 等等)。在将时间绘制到其中之前,您需要清除持有时钟的表面:clock_surf.fill(clearcolor, clock_surf.get_rect())。