Pygame Zero的ptext富文本渲染:对齐、自动换行、渐变文字与多字体完整清单
Pygame Zero的ptext富文本渲染对齐、自动换行、渐变文字与多字体完整清单【免费下载链接】pgzeroA zero-boilerplate games programming framework for Python 3, based on Pygame.项目地址: https://gitcode.com/gh_mirrors/pg/pgzero无论做新手小游戏还是 Pygame 项目画文字都是绕不开的需求分数、标题、提示语、菜单。Pygame Zeropgzero是基于 Pygame 的 Python 3 零样板游戏框架它内置的ptext 富文本渲染引擎让这一切只需一行调用——支持文字对齐、自动换行、渐变文字、多字体以及投影、描边、透明度无需手动切片与贴图拼接。本文拆解screen.draw.text与screen.draw.textbox这两个方法并附上完整的参数清单帮你一次看懂 ptext 的全部能力。ptext 富文本渲染能做什么 在 pgzero 中所有文字绘制都通过两个方法完成定义于src/pgzero/screen.py底层调用渲染引擎src/pgzero/ptext.pyscreen.draw.text(...)—— 在指定位置绘制文字screen.draw.textbox(...)—— 让文字自动适配到给定矩形框内pong 示例中屏幕顶部那两行黄色居中大号分数就是这样画出来的见examples/pong/pong.pyscreen.draw.text(Computer: {}.format(score_left), colorMAIN_COLOR, center(WIDTH/4 - 20, 20), fontsize48)asteroids 示例中顶部居中的分数、居中的大字 GAME OVER! 与高分榜全部由draw.text完成见examples/asteroids/main.py多字体清单自定义 .ttf 字体的使用方法把.ttf字体文件放入项目根目录的fonts文件夹用文件名引用即可参数说明fontnameboogaloo字体文件名省略时使用系统默认字体fontsize48字号像素默认24sysfontnameArial使用系统字体不能与fontname同时指定bold/italic/underline粗体、斜体、下划线examples/basic/fonts目录自带 5 个可直接使用的字体boogaloo、bubblegum_sans、cherrycreamsoda、roboto_condensed、eunomia_regular。 字体对象会按「字体名 字号 样式」做缓存相同组合只加载一次无需担心重复读盘。文字对齐与定位16 个定位参数完整清单ptext 的定位参数与pygame.Rect属性语义完全一致可分开传两个也可用一个坐标对同时指定单轴参数单参数组合形式top、bottom、left、righttopleft、topright、bottomleft、bottomrightcenterx、centerymidtop、midleft、midright、midbottom、center例如screen.draw.text(你好, right840, top10)把文字钉在右上角center(WIDTH/2, 50)则水平居中。若同时给了left和right多出的参数会被自动忽略。直接传(x, y)坐标时还可以用anchor(x, y)取值 0~1精确控制锚点默认(0,0)即左上角。多行文本的align参数控制各行之间的水平关系可取left、center、right或 0.0~1.0 的小数。align缺省时会根据定位参数与anchor自动推断一般无需手写。自动换行width、widthem 与 lineheight 用法snake 示例中 Score: 7 固定钉在右上角见examples/snake/snake.py当文字较长时加上width就能在空格处自动换行三个关键参数width—— 每行最大宽度像素widthem—— 每行最大宽度以字体 em 为单位lineheight—— 行距字体行高的倍数默认1.0两个值得注意的细节\n永远换行width触发额外换行但只在空格处断行单个超长的单词不会被强制拆开。不想在某处空格换行时可用不换行空格\u00A0替代。examples/basic/ptext.py的按钮文字就用它把价格 单位绑在一起。渐变文字一行实现垂直色彩渐变给draw.text加上gcolor即可得到从上到下的垂直渐变顶部为color底部为gcolorscreen.draw.text(Clooky Clunker, midtop(sx / 2, 10), fontsize64, owidth1.2, color#884400, gcolor#442200)这正是示例游戏 Clooky Clunkerexamples/basic/ptext.py的标题写法——渐变叠加描边各一行参数。颜色参数支持 RGB 元组、颜色名orange、十六进制字符串#FF7F00等多种形式。tetra_puzzle 示例则两次调用draw.text用不同颜色画出 Score 标题与数字形成层次感更强的 HUD见examples/tetra_puzzle/main.py投影、描边与透明度让文字脱颖而出的三种特效 特效参数说明投影shadow(x, y)、scolor偏移以「字号÷18」为单位(1, 1)即右下方投影描边owidth、ocolor宽度以「字号÷24」为单位1.0是常用值透明度alpha取值 0~1内部按 1/16 取整以便缓存复用隐藏技巧使用投影或描边时把color设为全透明的(0,0,0,0)文字本身会消失、只留下投影或描边轮廓得到一个镂空效果。textbox 自动字号把文字塞进任意盒子screen.draw.textbox(text, rect)解决文字怎么刚好填满盒子的问题内部用二分搜索自动找到不超出矩形的最大字号。除fontsize与位置参数外可传入与draw.text相同的全部参数。examples/basic/ptext.py里四个商店按钮都是这么实现的——按钮文字长短不一却各自完美装进对应的按钮矩形。ptext 性能缓存与内存上限机制 ⚡贴图缓存相同文字 相同参数的组合会直接返回缓存位图不重复渲染。自动清理缓存总量超过MEMORY_LIMIT_MB默认 64MB时按最近最少使用自动淘汰逻辑见src/pgzero/ptext.py的clean()。也就是说即使每帧都绘制同一行分数第一帧之后的渲染开销几乎为零。ptext 关键词参数完整清单速查表 参数作用默认值fontname字体文件名位于 fonts 目录系统字体fontsize字号像素24sysfontname系统字体名Noneantialias是否抗锯齿Truebold/italic/underline粗体 / 斜体 / 下划线Nonecolor文字颜色whitebackground背景颜色None透明top/bottom/left/right及center、topleft等定位共 16 种写法—anchor锚点 (x, y)取值 0~1(0, 0)width/widthem每行最大宽度px / emNonelineheight行距字体行高倍数1.0align多行对齐left/center/right 或 0~1自动推断owidth/ocolor描边宽度 / 描边颜色None / blackshadow/scolor投影偏移 / 投影颜色None / blackgcolor渐变底部颜色Nonealpha透明度 0~11.0angle逆时针旋转角度度0完整的参数说明与更多示例可查阅官方文档doc/ptext.rst。上手示例在哪里 克隆仓库后即可在examples目录看到全部示例git clone https://gitcode.com/gh_mirrors/pg/pgzeroexamples/basic/ptext.py—— 效果最全的示范渐变、投影、描边、透明度、textbox 一次看全examples/pong/pong.py—— 居中对齐的分数文字examples/asteroids/main.py—— 大号文字与高分榜表格examples/tetra_puzzle/main.py—— 双色 HUD 显示小结ptext 的核心价值是一行画文字参数即特效。新手做游戏时先用draw.text 定位参数把文字放到位再按需加width自动换行、加gcolor/shadow/owidth提升观感就足以覆盖 90% 的游戏文字需求。【免费下载链接】pgzeroA zero-boilerplate games programming framework for Python 3, based on Pygame.项目地址: https://gitcode.com/gh_mirrors/pg/pgzero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
