为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 pygame 中渲染/blit 文本以获得良好的性能

如何在 pygame 中渲染/blit 文本以获得良好的性能

天涯尽头无女友 2024-01-15 21:16:49
我正在使用 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 问题。我渲染或位图传输文本的方式有问题吗?
查看完整描述

1 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

不要pygame.font.Font在每一帧中创建对象,也不要在每一帧中渲染文本。在程序开始时或在类的构造函数 ( )中创建一次文本Surface 。__init__只是每帧中的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)

# [...]


查看完整回答
反对 回复 2024-01-15
  • 1 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信