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 (クラス、レースなどの特定のキーの下)に保存すると、この 1 回限りの処理に数秒かかる場合があります。辞書内の .py の本体 (このような 5k 行) にテキストを格納する価値はありますが、そうしない理由はありますか?
  • を使用した実行時のデコードpyglet.text.decode_attributedには時間がかかります。しかし、ゲームの参照が完了するとおそらく 100 の「ページ」になることを考慮すると、実行前のデコード (辞書全体または json のデコード) には、ゲーム前にかなりの時間がかかります。では、事前にデコードするか、オン フライでデコードしますか (つまり、効率的なコードを作成しないと、一部のテキストが重複して再コード化される可能性があります)。ピグレットではスレッドは信頼できません...
  • ドキュメントのコンテンツのレンダリングとその後の切り替えには、pyglet.text.layout.ScrollableTextLayout大きなテキストのチャンクでは 1 ~ 2 秒かかります。テキストが事前にデコードされていない場合は、さらに時間がかかります。
  • または、pyglet のコンテキストでテキストをレンダリングするために使用できる他のライブラリがあるかもしれません(いくつかの調整があります)...ただし、現在の形式では、「参照」ビューまたはたとえば、ツールチップ用に少量のテキストを抽出します...
  • 最終的な考慮事項: 低スペックのマシンを対象としているため、ここではパフォーマンスが重要です。このゲームはグラフィカルなローグライク / 2D RPG であり、libtcod/curses 以上のものを必要としますが、3D グラフィックスは必要ありません。そのため、今のところ pyglet を使用しています。しかし、具体的には、フォーマットされたテキストの側面が私を悩ませています。
4

1 に答える 1

1

保管所

もし私があなただったら、テキストを生の形式で保持し、適切な構造に一度読み込んでから、ピクルバイナリdictionaryにダンプします。読み取りと操作の両方が非常に高速で、占有するスペースも少なくて済みます。

デコード

これは、何らかの方法で実行する必要があることです。
最初は単純に初期設定を行う読み込み...画面を表示するだけで問題ありませんが、後でそれを最適化し、いくつかの最初のものだけを読み込み、ユーザーがメニューなどをいじっている間に残りをバックグラウンドで読み込むことができます。

通常、GL ライブラリのものはシリアル化できません (一部の部分はシリアル化できますが、場合によっては注意が必要です)。
したがって、最善の方法は、起動のためにロードする必要があるものを分離し、残りを順次デコードにパッケージ化することです。

ピグレット

さて、誰もが自分の宗教を持っています。私のは Python と Pyglet です。
そうは言っても、本当に Pyglet が必要ですか? つまり、Text のみを使用する場合は、おそらく Pygame や、TkInter や Kiwy などの UI キットの方が適しているのでしょうか。

Pyglet は非常に多様で、複雑なものを簡単に処理できますが、物事を行うには非常に重くて面倒な手動作業でもあります。通常、これは、これまでに行われたことのないクレイジーなことを行う場合に役立ちます。たとえば、他の方法では実行できない独自の gfx エンジンやカスタム ボタンなどです。

二次元

これは要件だとおっしゃいましたが、ビジョンを持っているのはあなたなので理由はわかりません。
しかし、パフォーマンスを改善する方法について昨日回答した別の質問を見てください。

効率的にレンダリングする方法と、必要な作業に適したスプライト クラスを設定する方法について詳しく説明します。

以前に 2D/横スクロール/RPG ゲームを作成し、Pyglet を使用したことがありますが、それは、他の事前定義されたライブラリを使用するよりも手動の退屈な作業をより簡単に行えるためです..
ハードを後悔しない理由を知っている場合がんばれ!しかし、実際にはコードのヘルプ自体を求めていないので、これが私たちが提供できるすべてのヘルプです。

頑張ってください!

于 2016-01-19T11:04:00.103 に答える