【问题标题】:How to render/blit text in pygame for good performance如何在 pygame 中渲染/blit 文本以获得良好的性能
【发布时间】:2020-10-27 22:03:06
【问题描述】:

我正在使用 Pygame 开发一个小游戏(作为一种爱好)。在此之前,我从未在图形界面上工作过,并且遇到了一些性能问题。即使在选项菜单中,FPS 似乎也被限制在 110 左右,这听起来可能还不错,但考虑到它只是一个带有一些文字的黑屏,FPS 肯定应该更高。这是其中一个文本框的代码:

font = pygame.font.SysFont("Comic Sans MS", 180)
color = (0,60,20)
screen.blit(font.render("Title", False, color), (480,0))

选项菜单只有大约 15 个文本框,这已经导致 FPS 问题。我渲染或传送文本的方式有问题吗?

【问题讨论】:

    标签: python pygame render blit


    【解决方案1】:

    不要在每一帧中创建pygame.font.Font 对象,也不要在每一帧中渲染文本。在程序开始时或在类的构造函数 (__init__) 中创建一次文本Surface。只需blit 每一帧中的文本Surface

    初始化时:

    font = pygame.font.SysFont("Comic Sans MS", 180)
    color = (0,60,20)
    text_surface = font.render("Title", False, color)
    

    每帧一次:

    screen.blit(text_surface, (480,0))
    

    如果文本是动态的,它甚至不能被预渲染。但是,最耗时的是创建pygame.font 对象。至少,您应该避免在每一帧中都创建字体。
    在典型的应用程序中,您不需要字体和字体大小的所有排列。您只需要几个不同的 font 对象。在应用程序开始时创建一些字体,并在渲染文本时使用它们。例如:

    fontComic40  = pygame.font.SysFont("Comic Sans MS", 40)
    fontComic180 = pygame.font.SysFont("Comic Sans MS", 180)
    # [...]
    

    【讨论】:

    • 哇,只是在程序开始时创建字体对象使 fps 从 110 变为 250,我什至还没有对渲染进行任何更改。感谢您的帮助!
    猜你喜欢
    • 2013-03-24
    • 2018-04-21
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 2020-11-07
    • 2017-06-21
    相关资源
    最近更新 更多