[英]Render formatted text in python (currently with pyglet)
我正在使用pyglet制作游戏。 在某个时候,该游戏将在游戏中提供帮助/参考,以参考某些“核心” RPG规则以及说明等内容(该游戏使用Pathfinder SRD)。 因此,存在长格式的文本(具有不同的大小,颜色等)。 我要提供的样式示例(将进行进一步的格式化): 游戏内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).
"""
pyglet.text.decode_attributed
进行解码需要一些时间。 但是考虑到游戏参考完成后可能会有一百个“页面”,因此在运行时进行解码(解码整个字典或json)将花费大量的赛前时间。 因此,要进行预解码或即时解码(这意味着,如果我没有编写出有效的代码,某些文本可能会被多余地重新编码)? 线程在pyglet上不可靠... pyglet.text.layout.ScrollableTextLayout
文档的内容在大块文本上花费1-2秒,如果先前未解码,则花费更多时间; 如果我是您,则将文本保留为原始格式 ,将其读入您适当的dictionary
结构一次,然后将其转储为pickle二进制文件。 读入和使用都非常快,而且占用的空间更少。
这是需要以某种方式完成的事情。
最初只是简单地具有一个可以进行初始设置的loading ...屏幕,但是稍后您可以对其进行优化,并仅加载一些初始内容,然后在用户摆弄菜单或其他内容时将其余内容加载到后台。
通常,您无法序列化GL库的内容(您可以对某些部分进行序列化,但这有时很棘手)。
因此,最好的办法是分离启动时需要加载的内容,然后将其余的内容打包为顺序解码。
现在,每个人都有自己的宗教信仰。 我的是Python和Pyglet。
话虽如此,您确定您确实需要Pyglet吗? 我的意思是,如果您只打算使用Text,也许Pygame甚至UI套件(例如TkInter或Kiwy)是更好的选择?
Pyglet确实是多种多样的,可以轻松处理复杂的事物,但是它也是一件繁重而繁琐的手工工作。 通常,如果您要做以前从未做过的疯狂事情,这将是有益的。 例如,您自己的gfx引擎或自定义按钮无法通过其他方式完成。
您提到这是一项要求,但由于您是有远见的人,所以我不确定为什么。
但是,请看我昨天回答的另一个有关如何提高性能的问题。
它详细介绍了如何高效地渲染内容,以及如何设置与您需要执行的操作很好配合的Sprite类。
我之前曾做过2d / side-scroller / rpg游戏,并使用过Pyglet,但这仅是因为与使用其他预定义的库相比,手动进行繁琐的工作比使用其他的预定义库更加轻松。
如果您知道为什么不后悔辛苦工作,那就去吧! 但这就是我们可以提供的所有帮助,因为您实际上并没有真正要求任何代码帮助。
祝您好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.