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

2024-04-29 10:47:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我用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(在class、race等的特定键下)存储文本,这个一次性处理可能需要几秒钟的时间;将文本存储在字典中的.py(such as this one, with 5k lines)的主体中是值得的,有什么理由不这样做呢?在
  • 在运行时使用pyglet.text.decode_attributed解码需要一些时间。但是考虑到当完成游戏引用时可能会有100个“页面”,在运行时之前解码(解码整个字典或json)将花费大量的游戏前时间。所以预解码,或者即时解码(这意味着有些文本,如果我不能生成一个有效的代码,可能会被冗余地重新编码)?线程在pyglet上不可靠。。。在
  • 呈现并随后切换pyglet.text.layout.ScrollableTextLayout文档的内容在大文本块上需要1-2秒,如果文本之前没有解码,则需要更长时间
  • 或者可能还有其他的库可以用来呈现pyglet上下文中的文本(经过一些调整)。。。但是,考虑一下,在当前的格式中,我既可以在“引用”视图中显示全部内容,也可以从中提取少量文本作为工具提示,例如。。。在
  • 最后要考虑的是:性能在这里很重要,因为我的目标是低规格的机器。游戏将是一个图形化的rogulelike/2d rpg,需要的不仅仅是libtcod/curses,但没有3d图形,这就是我现在使用pyglet的原因。但是格式化文本方面,特别是,让我感到困扰。在

Tags: text文档文本true游戏格式with时间
1条回答
网友
1楼 · 发布于 2024-04-29 10:47:36

储存

如果我是您,我会将文本保持为原始格式,将其读入适当的dictionary结构中,然后将其转储到pickle二进制文件中。它的阅读速度和工作速度都非常快,而且占用的空间也更少。在

解码

这是一件需要做的事情,不管怎样。
一开始只是简单的加载。。。进行初始设置的屏幕是可以的,但是以后你可以优化它,只加载一些初始的东西,然后在用户摆弄菜单或其他东西时在后台加载其余的内容。在

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

皮格勒

现在,每个人都有自己的宗教信仰。我的是Python和Pyglet。
这么说,你确定你真的需要皮格莱特吗?我的意思是,如果你只处理文本,也许Pygame或者甚至像TkInter或Kiwy这样的UI工具包是更好的选择?在

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

二维

你提到这是一个要求,我不知道为什么,因为你是有远见的人。
但请看一看我昨天回答的另一个关于如何提高绩效的问题。在

它详细介绍了如何高效地呈现内容,以及如何设置一个sprite类,它可以很好地满足您的需要。在

我以前做过一个2d/side scroller/rpg游戏,也用过Pyglet,但这仅仅是因为比起使用其他预定义的库,我觉得手工繁琐的工作更轻松。
如果你知道为什么你不会后悔前面的努力,那就去做吧!但这是我们能给你的所有帮助,因为你实际上还没有要求任何代码帮助。在

祝你好运!在

相关问题 更多 >