3

私は現在 as3 アイソメトリック ゲームを構築していますが、深さの並べ替えに多くの問題があります。解決策を探しましたが、問題 (長方形のオブジェクト) に一致するものは見つかりませんでした。

これが私のゲームのスクリーンショットです:

ここに画像の説明を入力

ご覧のとおり、深さの並べ替えは、1x1 のタイル オブジェクト間でうまく機能します。私は単純にそれらの x 座標と y 座標 (アイソメ マップに相対的) を使用してそれらを並べ替えます。

問題は、2x2、1x4、4x1 などの大きなオブジェクトがある場合に発生します。

深度ソートをどのように処理すればよいでしょうか?

4

2 に答える 2

8

オブジェクトの一部が十分に長く、一方の端がもう一方の端とは異なる深さになる可能性がある場合、各オブジェクトの単一xの値に基づいてシーンを並べ替えることはできないと思います。yたとえば、写真の茶色の椅子を1マス左下(青い椅子と長いソファの間のマス)に移動した場合のレンダリングの処理方法を検討してください。ソファの後ろにある赤いテーブルよりもシーンの奥深くにありますが、ソファの上にレンダリングする必要があり、テーブルの上に配置する必要があります。

私は2つの簡単な解決策があると思います:

  • 大きなオブジェクトに対して1種類のオーバーラップのみを使用してレベルを設計します。たとえば、オブジェクトの深さが最も近いコーナーに基づくように指定できます。これにより、最も遠いビットの前に物を置かないようにする必要があります(オブジェクトの上にレンダリングされるため)。または、現在のコード(深さのために最も遠いコーナーを使用しているようです)に固執し、近くの部分の後ろに何かを置くことを避けることができます。ただし、キャラクターやその他のオブジェクトが動き回る場合は、まだ問題が発生する可能性があります。デザインに注意すれば、面倒なタイルにアクセスできなくなる可能性がありますが、制限が厳しすぎる場合もあります。
  • 大きなオブジェクトを、独自の深さを持つ小さなオブジェクトに分割します。おそらく、1x1のピースまで下げたいと思うでしょう。それぞれのピースには、明確な深さがあります。コード内の大きなオブジェクトを小さなピースの非表示のコンテナーとして保持するか、完全に削除するかを選択できます。どちらかを選択すると、ロードしてさまざまなビットとの対話が容易になります。

1x1大きなオブジェクトをモジュール化できるので、大きなオブジェクトをサイズに分割することもできます。つまり1x1、さまざまな組み合わせでピースを組み合わせることで、さまざまなサイズのオブジェクトを作成できます。2x1たとえば、画像内のテーブルを垂直方向に半分にカット1x1し、それらの間に収まる中央のタイルを作成した場合、中央のタイルを繰り返す回数に応じて、デザインを3x1またはに伸ばすことができます。10x1適度な量のアートだけでタイルグラフィックスの見栄えを良くする方法は他にもたくさんあります。

于 2012-06-23T06:56:11.707 に答える
2

Ultima Online エミュレーター (他にもあるかもしれませんが具体的には POL) は、「マルチ」の概念の実装と使用を通じてこれを実現します。これらのカットアップ グラフィックは、アイソ グリッド境界の左右のコーナー ポイントでスプライトが垂直に分割されるようなものです。

その他の考慮事項: - スクリーン Y 軸で上から下に並べ替えられた「マルチ」ピースをレンダリングします。- 「マルチ」の南側 (つまり画面左下) のコンポーネントは、アンカー タイルの位置になります (ソファの場合は、一番左のピース)。- 各マップの場所は、オブジェクトの独自の垂直スタックも保持できることを考慮してください。各オブジェクトのレンダリングを画面 Y でオフセットすると、高さ/高度がシミュレートされ、これらは下から上に並べ替える必要があります (たとえば、最低高度から最高高度)。

幸運を!

于 2014-09-19T18:52:24.607 に答える