繁体   English   中英

呈现python中的格式化文本(当前使用pyglet)

[英]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).
"""
  • 如果我文本存储在json中(在类,种族等的特定键下),则一次处理可能需要几秒钟; 在字典中将文本存储在.py正文中( 例如,一行5k行 ),是否值得,是否有理由不这样做呢?
  • 在运行时使用pyglet.text.decode_attributed进行解码需要一些时间。 但是考虑到游戏参考完成后可能会有一百个“页面”,因此在运行时进行解码(解码整个字典或json)将花费大量的赛前时间。 因此,要进行预解码或即时解码(这意味着,如果我没有编写出有效的代码,某些文本可能会被多余地重新编码)? 线程在pyglet上不可靠...
  • 渲染并稍后切换pyglet.text.layout.ScrollableTextLayout文档的内容在大块文本上花费1-2秒,如果先前未解码,则花费更多时间;
  • 也许还有其他库可用于在pyglet的上下文中呈现文本(进行一些调整)...但是,请考虑一下,以当前格式,我可以在“参考”视图中显示全部内容,或者从中提取少量文本作为工具提示,例如...
  • 最后需要考虑的一些因素:性能很重要,因为我针对的是低规格机器。 该游戏将是一个图形化的roguelike / 2d rpg,比libtcod / curses要求更多,但没有3d图形,这就是为什么我现在使用pyglet的原因。 但是,特别是格式化文本方面让我感到困扰。

存储

如果我是您,则将文本保留为原始格式 ,将其读入您适当的dictionary结构一次,然后将其转储为pickle二进制文件。 读入和使用都非常快,而且占用的空间更少。

解码

这是需要以某种方式完成的事情。
最初只是简单地具有一个可以进行初始设置的loading ...屏幕,但是稍后您可以对其进行优化,并仅加载一些初始内容,然后在用户摆弄菜单或其他内容时将其余内容加载到后台。

通常,您无法序列化GL库的内容(您可以对某些部分进行序列化,但这有时很棘手)。
因此,最好的办法是分离启动时需要加载的内容,然后将其余的内容打包为顺序解码。

Pyglet

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

Pyglet确实是多种多样的,可以轻松处理复杂的事物,但是它也是一件繁重而繁琐的手工工作。 通常,如果您要做以前从未做过的疯狂事情,这将是有益的。 例如,您自己的gfx引擎或自定义按钮无法通过其他方式完成。

2D

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

它详细介绍了如何高效地渲染内容,以及如何设置与您需要执行的操作很好配合的Sprite类。

我之前曾做过2d / side-scroller / rpg游戏,并使用过Pyglet,但这仅是因为与使用其他预定义的库相比,手动进行繁琐的工作比使用其他的预定义库更加轻松。
如果您知道为什么不后悔辛苦工作,那就去吧! 但这就是我们可以提供的所有帮助,因为您实际上并没有真正要求任何代码帮助。

祝您好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM