如何在Pygame中加载使用本地.ttf格式自定义字体?
运行环境
- 操作系统:MacOS Monterey
- Python版本:3.10.4
- Pygame版本:2.1.2
Pygame加载本地.ttf自定义字体实现方案
你已经掌握内置字体显示逻辑的话,换自定义ttf的学习成本很低,核心是选对加载接口,注意路径问题即可,不需要额外安装第三方依赖。
标准实现步骤
- 先做路径兼容处理
MacOS环境下最常见的加载失败问题就是相对路径写死,运行目录变了就找不到字体文件,建议用绝对路径拼接的方式定位ttf文件:import os import pygame # 必须先初始化pygame,字体模块才能正常工作 pygame.init() # 假设你的自定义ttf放在项目目录下的 assets/fonts 文件夹,文件名为 game_font.ttf # 下面的写法会自动根据当前脚本的位置拼出字体文件的绝对路径,不受运行目录影响 FONT_FILE_PATH = os.path.join( os.path.dirname(os.path.abspath(__file__)), "assets", "fonts", "game_font.ttf" ) - 加载字体并渲染文本
自定义字体要用pygame.font.Font接口加载,不要用专门调用系统字体的SysFont接口,加载完成后的渲染逻辑和你用内置字体完全一致:# 第一个参数是字体路径,第二个参数是要使用的字号,比如这里用32号字 my_custom_font = pygame.font.Font(FONT_FILE_PATH, 32) # 渲染文本:参数依次为 文本内容、是否开启抗锯齿、文字RGB颜色、背景色(背景色可省略) text_surface = my_custom_font.render("自定义字体测试文本", True, (255, 255, 255)) # 之后把text_surface blit到屏幕对应位置就行,和普通文本渲染逻辑没有区别
常见踩坑说明
- 接口用错是最高发的问题:
pygame.font.SysFont只会搜索系统已经安装的字体,你直接把ttf文件名传给它是找不到目标字体的,而且它不会抛出报错,会静默回退到Pygame默认字体,很多人卡很久都没发现字体根本没加载成功。 - 加载字体前一定要先执行
pygame.init(),如果不想全局初始化也可以单独调用pygame.font.init(),否则会报字体模块未初始化的错误。 - 如果加载时报文件解析错误,先双击ttf文件打开MacOS自带的字体册,看能不能正常预览——如果系统都识别不了损坏的字体文件,Pygame也没法正常加载。
- 如果你不想把ttf文件打包进项目,也可以先把ttf安装到MacOS系统字体册,之后直接用
SysFont调用即可,注意这里传的参数是字体册里显示的字体正式名称,不是ttf的文件名,否则会匹配失败。
内容的提问来源于stack exchange,提问作者user19284560
相关产品推荐
相关产品推荐

