【问题标题】:Failing to update pygame surfaces无法更新 pygame 表面
【发布时间】:2017-01-25 20:56:53
【问题描述】:

我正在制作一个 pygame 游戏。我有 3 个表面:gameDisplay(直接渲染角色和背景)、guiSurfinvSurf 我有一个核心 pyhon 制作的时钟,它使用 pygame 字体显示游戏时间。我将时钟转为guiSurf,然后在我的游戏循环中我将guiSurfinvSurf 转为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())

      【讨论】:

        猜你喜欢
        • 2019-12-05
        • 2012-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-04
        相关资源
        最近更新 更多