如何在 pygame 中 render/blit 文本以获得良好的性能
How to render/blit text in pygame for good performance
我正在使用 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 问题。我渲染或 blit 文本的方式有问题吗?
不要在每一帧中创建 pygame.font.Font
对象,也不要在每一帧中渲染文本。在程序的开头或在 class 的构造函数 (__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))
如果文本是动态的,它甚至不能是pre-rendered。不过最time-consuming是创建pygame.font
对象。至少,你应该避免在每一帧都创建字体。
在典型的应用程序中,您不需要字体和字体大小的所有排列。您只需要几个不同的 font
对象。在应用程序的开头创建一些字体,并在渲染文本时使用它们。例如:
fontComic40 = pygame.font.SysFont("Comic Sans MS", 40)
fontComic180 = pygame.font.SysFont("Comic Sans MS", 180)
# [...]
我正在使用 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 问题。我渲染或 blit 文本的方式有问题吗?
不要在每一帧中创建 pygame.font.Font
对象,也不要在每一帧中渲染文本。在程序的开头或在 class 的构造函数 (__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))
如果文本是动态的,它甚至不能是pre-rendered。不过最time-consuming是创建pygame.font
对象。至少,你应该避免在每一帧都创建字体。
在典型的应用程序中,您不需要字体和字体大小的所有排列。您只需要几个不同的 font
对象。在应用程序的开头创建一些字体,并在渲染文本时使用它们。例如:
fontComic40 = pygame.font.SysFont("Comic Sans MS", 40)
fontComic180 = pygame.font.SysFont("Comic Sans MS", 180)
# [...]