このような粘液拡散の例を次に示します。物質は発生源の周りに広がります(この例では、発生源はエイリアンの主要な建物です)。
ゲームはスタークラフトで、紫色の物質はクリープと呼ばれています。
トップダウンの2D環境で、この種の物質拡散はどのように達成されるのでしょうか?物質の進行を再計算し、フレームごとにその場で効果を再生成するのか、それとも大量のタイルやその他のコレクションを使用するのか?
このような粘液拡散の例を次に示します。物質は発生源の周りに広がります(この例では、発生源はエイリアンの主要な建物です)。
ゲームはスタークラフトで、紫色の物質はクリープと呼ばれています。
トップダウンの2D環境で、この種の物質拡散はどのように達成されるのでしょうか?物質の進行を再計算し、フレームごとにその場で効果を再生成するのか、それとも大量のタイルやその他のコレクションを使用するのか?
回答:
他の回答のコメントによると、問題はクリープ拡大アルゴリズムではなく、使用するクリープタイルを選択するアルゴリズムです。
使用するタイルは次の条件によって異なります。
つまり、合計16タイルが必要になります。あなたは簡単にビットフィールドでそれらに対処することができます。以下は、考えられるすべてのクリープ配置に対して異なるタイルを選択するいくつかの疑似コードです。
index = 0;
if left tile is creeped then index += 1
if lower tile is creeped then index += 2
if right tile is creeped then index += 4
if upper tile is creeped then index += 8
creep_tile = creep_tiles[index]
タイルの感染状態を変更すると、隣接するタイルがすべて変更されたため、感染した隣接タイルをすべて再評価する必要があることに注意してください。
16タイルのグラフィックをデザインしてそれらがうまく合うようにする方法は、グラフィックデザイナーにとって(新しい)問題です。
少し前に、Starcraft 2でクリープがどのように広がるかを詳しく説明した戦略の記事を読んだのですが、今それを見つけるのに苦労していますが、かなり単純で、このように機能することを覚えています
クリープが広がっているタイルを追跡する最も簡単な方法は、おそらく各タイルのフラグにすぎません-毎ターン再計算しないでください。
「ティック」間の時間を使用して、クリープの拡散率を制御できます。あるいは、クリープを「ティック」ごとに複数のタイルに拡散させたり、ティック間の時間をランダム化したりすることもできます。
上記のアルゴリズムは、どちらかの側の崖によってブロックされている場合、クリープがより速く広がるという効果がありますが、代わりに、クリープのソースの範囲内でランダムタイルを選択し、崖でない場合にのみそのタイルにクリープを広げることができます。 。