Bagaimana cara menampilkan efek "penyebaran lendir" dalam lingkungan 2D?

8

Berikut adalah contoh penyebaran lendir. Substansi tersebar di sekitar sumber (dalam contoh ini, sumber akan menjadi bangunan alien utama).

masukkan deskripsi gambar di sini

Game ini adalah starcraft, zat ungu disebut creep.

Bagaimana penyebaran zat semacam ini akan dicapai dalam lingkungan 2D top-down? Menghitung ulang perkembangan zat dan meregenerasi efek pada terbang setiap frame atau lebih tepatnya menggunakan koleksi besar ubin atau sesuatu yang lain?

nathan
sumber
Sulit untuk mengatakan apa yang Anda cari, tepatnya. Untuk menebak, saya akan melewati semua ubin, dan jika ubin kosong tetapi memiliki ubin N berbatasan dengan infeksi, maka menginfeksi ubin saat ini.
Jari Komppa
3
Kata kunci yang Anda cari adalah "automata seluler".
Marton
1
Terkait: pilih-ubin-berbasis-berdekatan-ubin
MichaelHouse
@ Byte56 jawaban yang bagus, cukup jelas. Terima kasih telah berbagi.
nathan

Jawaban:

7

Menurut komentar Anda di jawaban lain, masalah Anda bukan algoritma creep tumbuh, melainkan algoritma yang memilih ubin creep untuk digunakan.

Ubin mana yang digunakan tergantung pada apakah:

  1. ubin atas terinfeksi atau tidak
  2. ubin yang tepat terinfeksi atau tidak
  3. ubin bagian bawah terinfeksi atau tidak
  4. ubin kiri terinfeksi atau tidak

Itu berarti Anda akan membutuhkan total 16 ubin. Anda dapat dengan mudah mengatasinya dengan bitfield. Berikut adalah beberapa pseudocode yang akan memilih ubin berbeda untuk setiap konstelasi creep yang mungkin:

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]

Perhatikan bahwa setiap kali Anda mengubah status infeksi ubin, semua ubin berdekatan yang terinfeksi perlu dievaluasi ulang, karena lingkungan mereka sekarang telah berubah.

Cara mendesain 16 ubin grafik sehingga mereka cocok bersama dengan baik adalah pertanyaan (baru) untuk seorang desainer grafis.

Philipp
sumber
1
@nathan Juga cari Cellular Automata.
Insinyur
2

Beberapa waktu yang lalu saya membaca artikel strategi yang menjelaskan secara rinci bagaimana creep menyebar di Starcraft 2, saya berjuang untuk menemukannya sekarang tetapi saya ingat itu cukup sederhana dan bekerja sedikit seperti ini

  • Peta Starcraft 2 dibagi menjadi ubin
  • Untuk setiap sumber creep, setiap "centang" memilih ubin acak yang layak untuk menyebar creep, dan menyebar creep ke ubin itu
  • Creep dapat menyebar ke ubin mana saja
    • Berdekatan dengan ubin lain dengan creep di atasnya, atau berdekatan dengan sumber creep
    • Dalam kisaran tertentu dari sumber creep
    • Bukan tebing

Cara termudah untuk melacak ubin yang merambat telah menyebar mungkin hanya sebuah bendera untuk setiap ubin - jangan coba menghitung ulang setiap belokan.

Waktu antara "ticks" dapat digunakan untuk mengontrol laju penyebaran creep, atau Anda bisa membiarkan creep menyebar ke beberapa ubin setiap "tick", atau bahkan secara acak waktu antara tick.

Algoritme di atas memiliki efek creep yang menyebar lebih cepat jika diblokir oleh tebing di kedua sisi, namun Anda bisa memilih ubin acak dalam jangkauan sumber creep dan kemudian hanya menyebar creep ke ubin itu jika bukan tebing. .

Justin
sumber
Bagus tapi bagaimana dengan merayap ubin , algoritma ini benar sederhana, saya pikir untuk sesuatu yang serupa. Tetapi bagaimana cara mendapatkan efek alami dan tidak sempurna ini menggunakan ubin?
nathan
@nathan Bagaimana maksudmu? Karena ubin merayap dipilih secara acak penyebaran tidak sempurna (sebagai lawan menyebar dalam lingkaran yang sempurna). Sisanya dilakukan di mesin grafis dengan memilih tekstur apa yang harus ditampilkan untuk setiap ubin.
Justin
ya pertanyaan saya lebih tentang bagaimana memilih ubin apa yang akan digunakan untuk mendapatkan efek yang koheren.
nathan
1
@nathan Mereka kemungkinan besar memiliki banyak sprite prerender yang ketika diletakkan bersebelahan dalam kombinasi yang tepat, buat efek visual yang diinginkan.
Panda Pajama
1
@nathan Mungkin seharusnya bertanya bagaimana menampilkannya, daripada bagaimana memproduksinya.
MichaelHouse