等角タイルのアニメーションドアを処理する方法


10

どうやって対処すればよいかわからないトリッキーな問題があります。ドアのアニメーションタイルがあります。閉じている場合は、1つの方法で並べ替える必要がありますが、オープンエンドの場合は、異なる(隣接タイル)に属するため、別の方法で並べ替える必要があります。

ドアが閉まっています。

ドアを閉めた

そしてドアが開いた:

ドアが開いた

そのようなタイルの並べ替えシステムをオーバーライドして、フレームに基づいて並べ替えを調整することは可能だと思いますが、少しハックに感じます。

誰かが同様のシナリオに遭遇しましたか?エレガントなソリューションはありますか?


2
現在、並べ替えシステムはどのようにタイルの描画順序を検出していますか?
Roy T.

回答:


4

たぶん、異なるタイル上の2つのオブジェクトからドアを作り、一度に1つだけを表示することができます。この方法では、ドアが開いていると動きもブロックされる可能性があります。


4

3つのスプライトを作成...

  1. ドアが閉じました(最初のスプライトのように)-動きをブロックします
  2. ドアのフレーム(あなたの場合はポスト)だけでドアはありません-動きを妨げません
  3. 開いた位置にあるドアのみ-動きをブロックします

ドアが閉まったら、スプライト1を描画し、それを「ブロッカー」として扱い、プレイヤーがドアを通り抜けられないようにします。

ドアが開いたら、そのスプライトを#2(ドアポストのみ)に置き換えます。次に、スプ​​ライト#3(ドアのみ)を、ドアが入る隣接するセルに配置します。

閉めるとは、ドアを取り外し、ポストを閉位置のポスト+ドアに置き換えるだけです。

この設定により、開いたドアを特別な順序でレンダリングすることを心配する必要はありません。正方形にある他のオブジェクトと同じ順序でレンダリングします。

欠点は、開いたドアが入る正方形にプレイヤーや他のオブジェクトを置くことができないことです。


3

2Dでの並べ替えに使用する2つのトリックがあります。

  • スプライトに地面の位置を追加します。これは、スプライトが地面(男性の足、木の幹、ドアフレーム)に接触するポイントであり、スプライトピクセルの代わりにそれによって並べ替えます。このようにして、スプライトはアニメーションの影響を受けません

  • ソート不可能な子をオブジェクトに追加します(男性の場合、ソートに影響を与えない子が複数存在する可能性があります-マント、弓、剣など、ドアフレームには子ドアがあります)。このように、子スプライトのアニメーションはソートにも影響しません。


1

オブジェクトの並べ替えを解決する最善の方法は、並べ替えをまったく行わないことです。デプスバッファーを使用すると、すべてを1つのパスでレンダリングできます。高いZ値を持つオブジェクトは、低いZ値を持つオブジェクトよりも離れています。

ゲームが2Dであっても、深度バッファーで3D座標を使用することを検討する必要があります。そうしないと、ペインターのアルゴリズムで永遠にタンゴができます。


正しいですが、Z位置を決定する方法は?並べ替えのみ
Kromster

はい。ただし、その並べ替えはレンダリング中ではなくオフラインで行われるようになりました。これで、レベルデザイナーは、オブジェクトのクリッピングを気にすることなく、Z値を考慮してレベルを構築できます。
knight666
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.