2D環境で「粘液拡散」効果を表示するにはどうすればよいですか?


8

このような粘液拡散の例を次に示します。物質は発生源の周りに広がります(この例では、発生源はエイリアンの主要な建物です)。

ここに画像の説明を入力してください

ゲームはスタークラフトで、紫色の物質はクリープと呼ばれています。

トップダウンの2D環境で、この種の物質拡散はどのように達成されるのでしょうか?物質の進行を再計算し、フレームごとにその場で効果を再生成するのか、それとも大量のタイルやその他のコレクションを使用するのか?


あなたが何をしているのか正確に言うのは難しいです。推測を危険にさらすために、すべてのタイルを通過させます。タイルが空であるが、感染に隣接するNタイルがある場合は、現在のタイルに感染します。
Jari Komppa

3
お探しのキーワードは「セルオートマトン」です。
Marton、


@ Byte56すばらしい答え、かなり明確。共有いただきありがとうございます。
ネイサン

回答:


7

他の回答のコメントによると、問題はクリープ拡大アルゴリズムではなく、使用するクリープタイルを選択するアルゴリズムです。

使用するタイルは次の条件によって異なります。

  1. 上のタイルが感染しているかどうか
  2. 正しいタイルが感染しているかどうか
  3. 下のタイルが感染しているかどうか
  4. 左のタイルが感染しているかどうか

つまり、合計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タイルのグラフィックをデザインしてそれらがうまく合うようにする方法は、グラフィックデザイナーにとって(新しい)問題です。


1
@nathan Cellular Automataも調べてください。
エンジニア、

2

少し前に、Starcraft 2でクリープがどのように広がるかを詳しく説明した戦略の記事を読んだのですが、今それを見つけるのに苦労していますが、かなり単純で、このように機能することを覚えています

  • Starcraft 2マップはタイルに分割されています
  • クリープのソースごとに、すべての「ティック」は、クリープが広がる先のランダムなタイルを選択し、そのタイルにクリープを広げます
  • クリープは、
    • クリープのある別のタイルに隣接しているか、クリープのソースに隣接している
    • クリープの発生源の特定の範囲内
    • 崖ではない

クリープが広がっているタイルを追跡する最も簡単な方法は、おそらく各タイルのフラグにすぎません-毎ターン再計算しないでください。

「ティック」間の時間を使用して、クリープの拡散率を制御できます。あるいは、クリープを「ティック」ごとに複数のタイルに拡散させたり、ティック間の時間をランダム化したりすることもできます。

上記のアルゴリズムは、どちらかの側の崖によってブロックされている場合、クリープがより速く広がるという効果がありますが、代わりに、クリープのソースの範囲内でランダムタイルを選択し、崖でない場合にのみそのタイルにクリープを広げることができます。 。


ニースですが、タイルのクリープについてはどうでしょうか。アルゴリズムは単純ですが、似ていますが。しかし、タイルを使用してこの自然不完全な効果を得るにはどうすればよいですか?
ネイサン

@nathanどういう意味ですか?クリーピングタイルはランダムに選択されるため、(完全な円で広がるのとは対照的に)広がりは不完全です。残りは、各タイルに表示するテクスチャを選択することにより、グラフィカルエンジンで実行されます。
ジャスティン

ええ、私の質問は、一貫した効果を得るために使用するタイルを選択する方法についての詳細でした。
nathan

1
@nathan彼らはおそらく、適切な組み合わせで互いに隣り合わせに配置されると、望ましい視覚効果を生み出す多くの事前レンダリングされたスプライトを持っています。
パンダパジャマ

1
@nathanは、それをどのように生成するかではなく、どのように表示するかを尋ねたはずです。
MichaelHouse
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.