1

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

1 回答 1

1

贮存

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

解码

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

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

Pyglet

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

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

二维

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

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

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

祝你好运!

于 2016-01-19T11:04:00.103 回答