在python中渲染格式化文本(目前使用pyglet)

时间:2016-01-07 05:34:52

标签: python json pyglet formatted-text

我正在使用pyglet制作游戏。在某些时候,这个游戏将有一个游戏内的帮助/参考一些“核心”RPG规则,加上描述等(游戏使用Pathfinder SRD)。所以有长格式的文本(具有不同的大小,颜色等)。 我打算提供的样式示例(将进一步格式化): In-game SRD

目前我正在使用pyglet的格式化文档模型(带有一些python生成的字段用于样式/格式化的纯文本):

"""
{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).
"""
  • 如果我存储 json中的文本(在课程,比赛等的特定键下),这个一次性处理可能需要几秒钟;将文本存储在字典中的.py(such as this one, with 5k lines)正文中是值得的,有什么理由不这样做吗?
  • 运行期间使用pyglet.text.decode_attributed
  • 解码需要一些时间。但考虑到完成游戏参考时可能会有一百个“页面”,在运行时解码(解码整个字典或json)会花费大量的游戏前时间。所以预先解码或在飞行中解码(这意味着一些文本,如果我没有制作有效的代码,可以冗余地重新编码)? pyglet上的线程不可靠......
  • 渲染,稍后在大块文本上切换pyglet.text.layout.ScrollableTextLayout文档的内容需要1-2秒,如果之前没有解码文本则需要更多;
  • 或者可能有任何其他库可用于在pyglet的上下文中呈现文本(通过一些调整)...但是,请考虑一下,在当前格式中我能够同时显示“参考”视图中的所有内容或从中提取少量文本以获取工具提示,例如......
  • 最后一些考虑因素:性能在这里很重要,因为我的目标是低规格的机器。游戏将是一个图形roguelike / 2d RPG,需要的不仅仅是libtcod / curses,而是没有3D图形,这就是为什么我现在正在使用pyglet。但是格式化的文本方面,特别令我感到不安。

1 个答案:

答案 0 :(得分:1)

存储

如果我是你,我会将文字保留为原始格式,将其读入适当的dictionary结构,然后将其转储到pickle二进制文件中。阅读和使用它的速度非常快,占用的空间也很少。

解码

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

通常你不能序列化GL库的东西(你可以使用某些部分,但有时它很棘手) 因此,最好的方法是分离启动时需要加载的内容,然后将其余内容打包为顺序解码。

Pyglet

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

Pyglet非常多样化,可以轻松处理复杂的东西,但它也是一项非常繁重且手动繁琐的工作。通常,如果你要做一些以前没有做过的疯狂的事情,这是有益的。例如,您自己的gfx引擎或自定义按钮,否则无法完成。

2D

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

它详细介绍了如何有效地渲染内容,以及如何设置一个适合您需要做的精灵类。

之前我已经完成了2d /侧卷轴/ RPG游戏并使用了Pyglet,但这只是因为我觉得手动繁琐的工作比使用其他预定义的库更加轻松,再次..
如果你知道为什么你不会后悔前面的艰苦工作,那就去吧!但这是我们可以给你的所有帮助,因为你本身并没有真正要求任何代码帮助。

祝你好运!