在 python 中呈现格式化文本(目前使用 pyglet)

Render formatted text in python (currently with pyglet)

我正在使用 pyglet 制作游戏。在某些时候,这款游戏将在游戏中 help/reference 一些 "core" RPG 规则,加上描述等(游戏使用 Pathfinder SRD)。所以有长格式的文本(具有不同的大小、颜色等)。 我打算提供的样式示例(将进行进一步格式化): In-game SRD

目前我正在使用 pyglet 的格式化文档模型(纯文本和一些 python 为 style/formatting 生成的字段):

"""
{font_name 'Fontin'}{.align "center"}{bold True}{font_size 28}{italic True}{indent 0}{color (128,144,160, 223)}
The Title
{.align "left"}{bold False}{font_size 12}
Huge amount of text with further reformatting goes here...
And ends with a copyright notice (section 15 of OGL).
"""

存储空间

如果我是你,我会将文本保留为 原始格式 ,将其读入相应的 dictionary 结构中,然后将其转储到 pickle 二进制。它的阅读和使用速度都快得惊人,而且它占用的空间更少 space。

解码

这是需要以某种方式完成的事情。
最初只是简单地使用 loading... 屏幕进行初始设置就可以了,但稍后您可以优化它并仅加载少数初始内容并将其余内容加载到后台,同时用户正在摆弄菜单之类的东西。

通常你不能序列化 GL 库的东西(有些部分你可以,但有时很棘手)。
所以你最好的办法是把启动时需要加载的东西分开,然后把剩下的打包成顺序解码。

皮格莱特

现在,每个人都有自己的宗教信仰。我的是 Python 和 Pyglet。
话虽如此,你确定你真的需要 Pyglet 吗?我的意思是,如果您只打算使用文本,也许 Pygame 甚至 UI 工具包(例如 TkInter 或 Kiwy)是更好的选择?

Pyglet 真的很多样化,可以轻松处理复杂的东西,但它也是一项非常繁重且手工繁琐的工作。通常,如果您打算做以前从未做过的疯狂事情,这将很有帮助。例如,您自己的 gfx 引擎或无法通过其他方式完成的自定义按钮。

2d

你提到这是一项要求,我不确定为什么,因为你是有远见的人。
但是看看我昨天回答的另一个关于如何提高性能的问题。

它详细介绍了如何高效渲染内容以及如何设置精灵 class 以配合您的需要。

我之前玩过一个 2d/side-scroller/rpg 游戏并使用过 Pyglet,但只是因为我觉得手动繁琐的工作比使用其他预定义的库更自在..
如果你知道为什么你不会后悔前面的辛勤工作,那就去吧!但这就是我们可以为您提供的全部帮助,因为您实际上并没有请求任何代码帮助本身。

祝你好运!