TileベースのCOCOS2D - iPhoneゲームのための最良のz注文方法
-
12-11-2019 - |
質問
私はアイソメトリック、タイルベースのiPhoneゲームをCocos2Dとしたいです。
スプライトはそれを「後ろ」の他のスプライトの上に描かれている必要があります。私はこれを行うための最良の方法を探しています。
高価なすべてのスプライトをすべてのスプライトをソートすることが含まれているので、ペインタのアルゴリズムを避けたいと思います。
Zバッファアルゴリズムは、GPUとCOCOS2Dでサポートされているため、これが使用したいもので、問題があります。例えば建物のようなスプライトの中には、複数のタイルを占有しています。そのようなスプライトにz値を割り当てることは困難です。
これらは私が考えたオプションです:
- 2つの建物を比較し、どちらが「前方」のかを判断する 簡単です。そのため、建物をソートすることができ、それに基づいてZ値を割り当てることができます。 ソート順。これは画家とは異なるものではありません アルゴリズム。 OpenGL ES Zバッファーは必要ないでしょう。
- 純粋にその場所に基づいて各建物にz値を割り当てます マップ(他の建物がどこにあるかの知識がない)。私はいます これが難しいと発見する。私はそれが可能だと思いますが、私はいませんでした まだ式を思い付くことができます。
- 複数のタイルを占める画像に複数のスプライトを使用するので、 すべてのスプライトはまったく同じサイズです。その後z注文ができます スプライトがどのタイルを占有しているかに基づいて簡単に割り当てられます。 the この解決策の問題は、それがゲーム論理をはるかにしているということです。 複雑な。単一の建物のすべての操作は 各スプライトについて繰り返されます。そうしたいです 各オブジェクトを単一のエンティティとして扱います。
- スプライトを複数のz値にするためにCocos2Dコードを変更する
異なる点で。スプライトが複数のz値を持つことができる場合
スプライトの特定の部分が倒れたら、計算する
そのセクションのz値は簡単です。比較する必要はありません
他のスプライトにスプライトします。私はこれを使用することが可能であると思います
各スプライトの複数のクワッド。これに関する問題はそれがあるということです
私はOpenGL ESとCocos2Dに新たになっているため、少し複雑になりました。私
すべての内部データ構造を完全に理解しないでください
作業。式があれば最もエレガントな解決策のようですが
見つかりません。
私は有用なリソースへの提案や参照を上書きします。
解決
#2では、オブジェクトの中心のマンハッタン距離を計算し、この値をそのオブジェクトのz値として使用できます。5x1オブジェクトのようなマップ内の非常に長いオブジェクトを避けてください。ただし、タイルティックマップに配置される長いオブジェクトが必要な場合は、式を使用してz値を設定してマップ内のオブジェクトのzオーダーを管理することは不可能です。
これを証明する:
1.)2×2オブジェクトを地図に水平に地図に置き、単位タイルを残します。
2.)それらの間に3×1のオブジェクトを置きます。2x2オブジェクトをAとBに、および3x1オブジェクトをCに名前に付けましょう。
3.)Cを回転させるだけで(位置を変えない)、AとBの交換のzオーダー。
B Bは正面にあり、Bの背後にあるいくつかのオブジェクトはCの回転のためだけに、AとBの両方の背後にあるオブジェクトが前になるのかを知るために費用がかかる。Cの回転後。