2

私はタイルベースの地形生成システムに取り組んできましたが、ちょっとした障害に遭遇しました。水と陸の間の遷移を示す一連の遷移タイルを作成したいと思っていますが、どのタイルがどれであるべきかを効率的に判断する方法を見つけるのに苦労しています。

私の最初の試み (下図) は基本的に、一連の if ステートメントを介して各タイルを実行し、どのタイルにするかを決定します。これに関する主な問題は、100 タイル x 100 タイルの世界地図では、10,000 回の反復を実行し、周囲の 8 つのタイルのデータにアクセスし (80,000 操作)、最大 4 つの if ステートメント (320,000 回) を実行することです。オペレーション)。これは恐ろしく非効率的で遅いように思えます。

この方法の利点は、土地タイルでのみ実行され、最初に少なくとも 1 つの水タイルに隣接していることを確認するため、必要な操作の数が大幅に削減されることです。

これは、周囲のタイルを見て回り、適切なタイルを選択する、私が作成した基本的なチャートです。

試行 1 レイアウト

私の 2 番目のアイデアは、基本的にはタイルの中を歩き始め、海岸のタイルにぶつかったら、海岸に沿って両方向に進み、タイルを割り当てていくというものでした。このメソッドは、開始前にタイルがまだ把握されていないことを確認します。これに関する問題は、1 つは、それがどのように機能するかをまったく理解できないことです。2 つは、結果として、それがどれほど効率的であるかがわかりません。

友人が、うまくいくかもしれない 3 番目の方法について教えてくれました。水タイルを取り、それらを 0 に設定し、陸タイルを 1 に設定します。次に、周囲のタイルを取り、1 から 9 までの番号を付けます。そこからそれらを通り抜け、0 と 1 の文字列を作成します。

W   W   W
W   L   L
L   L   L

000011111 になります。

0*2^0 + 0*2^1 + 0*2^2 + 0*2^3 + 1*2^4 + 1*2^5 + 1*2^6 + 1*2^7 + 1* 2^8

0*1 + 0*2 + 0*4 + 0*8 + 1*16 + 1*32 + 1*64 + 1*128 + 1*126 = 496

理論的には、その組み合わせに関連付けられたタイルに番号 496 を割り当て、それに応じてロードするというものです。問題は、各エッジに 13 または 14 の組み合わせがあり、その組み合わせが使用されることです。例えば:

W   W   L           L   W   W
W   L   L    and    W   L   L   Both need the same tile as the above example, but
L   L   L           L   L   L   produce different numbers.

基本的に、この方法を機能させるには、特定のタイルになる可能性のある水と土地の組み合わせごとに最終的な数を計算し、最終的な数を一連の ifs / case で実行して、適切なものを選択する必要があります。ビットマップ。これは、if ブロックと同じかそれ以上に非効率的です。

それで、これらすべての実際の質問に来ます。これを行う別の方法、またはこれらの方法のいずれかをより効率的にする方法を知っている人はいますか?

4

1 に答える 1