タイルマップエディターで作業していて、隣接するタイルに基づいてタイルを自動的に選択する必要があります。たとえば、道路タイルを別の道路タイルの隣に配置する場合、2つは連続した道路を形成するように向きを合わせる必要があります。周辺に他の道路がある場合は、コーナータイルまたは交差点タイルを使用する必要があります。
誰かがこれを行うためのいくつかのアルゴリズムを推奨できますか?ゲームでは、8方向の正方形タイルマップを使用します。
タイルマップエディターで作業していて、隣接するタイルに基づいてタイルを自動的に選択する必要があります。たとえば、道路タイルを別の道路タイルの隣に配置する場合、2つは連続した道路を形成するように向きを合わせる必要があります。周辺に他の道路がある場合は、コーナータイルまたは交差点タイルを使用する必要があります。
誰かがこれを行うためのいくつかのアルゴリズムを推奨できますか?ゲームでは、8方向の正方形タイルマップを使用します。
回答:
多分これはそれが通常行われている方法です。すべての可能な向きで道路タイルを表すさまざまなタイルのリストがあります。左から右、四隅すべて、上から下など。次に、すべてのタイルにそれぞれ1バイトのインデックスを付けます。8ビット、各方向に1つ。これは、ハッシュマップまたはファイル名である可能性があります...ただし、これを実行したい場合。
だからあなたはこれを持っています:
上記のタイルのバイトコードは00000000です。次に、左から右(または右から左)に進むタイルは次のようになります。
そのタイルのバイトコードは10001000または136です。別の例として、3方向の交差を見てみましょう。
そのタイルのバイトコードは10101000です。
たぶん私がどこへ行くのかわかるでしょう。接続を表すバイトにビット位置を設定します。これは、以前見た大きなif / elseチェーンを実行するよりもはるかに優れています。タイルを配置する場合は、その周りのタイルを調べて、途中にバイトを作成します。道路のあるタイル(または接続しようとしているもの)には1を設定し、道路のないタイルには0を設定します。完了すると、必要な正確なタイルのバイトコードが得られます。
アセットを作成するときは、回転して正しいバイトコードを割り当てるだけで、多くのアセットを再利用できます。
編集:画像を更新して、より簡単になりました。はい、それらは以前よりも優れています。
詳細については、この便利なページをご覧になることをお勧めします。これは、実行していることのほぼすべての側面と、いくつかの最適化の可能性について詳しく説明しているためです。http: //www.angryfishstudios.com / 2011/04 /ビットマスクの冒険/
tldrは、隣接する各セルをクエリし、その組み合わせをビットフィールド/バイトに格納してから、0〜255の数値を0〜47の値に変換するマップに渡します。これは、一意の画像に対応します。