Python+pygletで昔ながらの2D RPGを開発しています。
マップは複数のレイヤー (最大 10) で構成され、各レイヤーは正方形のタイル (32x32 ピクセル) で構成されます。スプライト (パーティー キャラクター、NPC、その他のもの) は、2 つのレイヤーの間 (通常は最後のレイヤーの直前) に描画されます。
それをレンダリングするために、多くの OrderedGroups を持つ単一の Batch を使用します。レイヤーごとに 1 つのグループ、スプライトごとにグループです。
スプライトの問題は、y 値の降順でレンダリングする必要があることです。そのため、グループは次のように配置されます (マップに 3 つのレイヤーがあり、最後のスプライトの直前に 2 つのスプライトを描画する必要があるとします)。
g[0] = OrderedGroup(0) : first layer
g[1] = OrderedGroup(1) : second layer
g[2] = OrderedGroup(2) : empty, serves as a base for the following :
OrderedGroup(0, parent = g[2]) : the highest sprite
OrderedGroup(1, parent = g[2]) : the lowest sprite
g[3] = OrderedGroup(3) : the third layer
レイヤー スプライトをバッチに追加するときは、それらが静的であることを指定します。パーティー スプライトを追加すると、それらは「動的」になります。
だから私の最初の質問: それらはすべて同じバッチに属しているので、矛盾していませんか? (別の言い方をすると: 「静的」または「動的」はスプライト オブジェクトまたはバッチのプロパティですか?) (注: 私は OpenGL に関する知識がほとんどなく、バッチとグループがどのように実装されているかわかりません)
当分の間、パフォーマンスは正しいです (私は 60 fps が必要で、最大 8 個の移動スプライトがあります)。私のエンジンは、C/ASM で部品を変換することなく、可能な限り最も効率的です)。
だから私の2番目の質問:私が選択した戦略(バッチを使用し、できるだけ少なくする)は良いものですか?
回答ありがとうございます