python - 一次更新所有显示 PyGame

标签 python pygame

使用 PyGame,我得到闪烁的东西。方框、圆圈、文字,都在闪烁。我可以通过增加循环之间的等待时间来减少这种情况,但我想也许我可以通过一次将所有内容绘制到屏幕上来消除它,而不是单独执行所有操作。这是发生在我身上的一个简单例子:

    import pygame, time
    pygame.init()
    screen = pygame.display.set_mode((400, 300))
    loop = "yes"
    while loop=="yes":
        screen.fill((0, 0, 0), (0, 0, 400, 300))
        font = pygame.font.SysFont("calibri",40)
        text = font.render("TextA", True,(255,255,255))
        screen.blit(text,(0,0))
        pygame.display.update()

        font = pygame.font.SysFont("calibri",20)
        text = font.render("Begin", True,(255,255,255))
        screen.blit(text,(50,50))
        pygame.display.update()
        time.sleep(0.1)

“开始”按钮为我闪烁。它可能只是我的电脑速度较慢,但​​有没有办法减少或消除闪烁?在我正在处理的更复杂的事情中,它变得非常糟糕。谢谢!

最佳答案

我认为部分问题在于您多次调用“pygame.display.update()”。尝试在主循环期间只调用一次。

其他一些优化:

  • 您可以将字体创建代码从主循环中取出来加快速度
  • loop = True 而不是 loop = "yes"
  • 要获得更一致的 fps,您可以使用 Pygame 的 clock

所以...

import pygame
pygame.init()

screen = pygame.display.set_mode((400, 300))
loop = True

# No need to re-make these again each loop.
font1 = pygame.font.SysFont("calibri",40)
font2 = pygame.font.SysFont("calibri",20)

fps = 30 
clock = pygame.time.Clock()

while loop:
    screen.fill((0, 0, 0), (0, 0, 400, 300))

    text = font1.render("TextA", True,(255,255,255))
    screen.blit(text,(0,0))

    text = font2.render("Begin", True,(255,255,255))
    screen.blit(text,(50,50))

    pygame.display.update()   # Call this only once per loop
    clock.tick(fps)     # forces the program to run at 30 fps.

关于python - 一次更新所有显示 PyGame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11300745/

相关文章:

python - 在 Python 中从 csv 阅读器复制列表

python - 如何使用 python 2.7 64 位在 virtualenv 中安装 pywin32?

python - 如何在元组列表中找到第一次的最大绝对索引?

python - 为什么我的 python 进程占用了这么多内存?

python - 无事发生时显示 fps 为 0

python-3.x - 在 pygame 中制作表面全屏

python - 如何从 SonarQube 测试覆盖范围中排除 `if __name__ == ' __main_ _':` 下的代码

python - Pygame:放置多个对象时出错:(

python - 水波纹效果 Python 和 Pygame,来自编码火车视频

Python PGU 库 - 如何安装它?