【问题标题】:Render formatted text in python (currently with pyglet)在 python 中渲染格式化文本(目前使用 pyglet)
【发布时间】:2016-01-07 05:34:52
【问题描述】:

我正在使用 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 的原因。但具体而言,格式化文本方面让我感到困扰。

【问题讨论】:

    标签: python json pyglet formatted-text


    【解决方案1】:

    存储

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

    解码

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

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

    Pyglet

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

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

    2d

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

    它详细介绍了如何高效地渲染内容,以及如何设置一个可以很好地满足您需要的精灵类。

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

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2022-01-06
      • 2016-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      • 2020-02-10
      • 2010-09-26
      • 2011-01-31
      相关资源
      最近更新 更多