Saya ingin membuat peta secara acak untuk gim sidescroller 2D menggunakan tileset berikut:
Saya telah menemukan beberapa artikel bagus tentang proses bitmasking, misalnya: http://www.angryfishstudios.com/2011/04/adventures-in-bitmasking/ http://www.saltgames.com/2010/a-bitwise -metod-for-apply-tilemaps /
Saya suka ide menggunakan bitmask / tilemask alih-alih melakukan klausa besar atau beralih pernyataan.
Namun, saya mengalami kesulitan memvisualisasikan seluruh proses dan tidak ada artikel ini berbicara tentang pengacakan.
Ubin saya cocok bersama dalam berbagai cara, bukan hanya satu cara seperti ubin dalam contoh yang saya tautkan tampaknya.
Contohnya di sini hanya beberapa contoh:
Karena ubin saya cocok bersama dalam berbagai cara saya tidak berpikir topeng 8 bit akan bekerja. Karena itu, saya berpikir untuk menggunakan bitmask yang lebih besar. Sesuatu seperti char [8] atau char 4 .
Jika seseorang dapat menunjukkan beberapa pseudocode / contoh bagaimana algoritma umum akan terlihat, saya akan sangat menghargainya.
Sudahkah Anda mempertimbangkan untuk menggunakan fungsi Perlin 1D atau simpleks noise? Ada sejumlah keuntungan untuk ini, termasuk:
Infinite (dalam bidang presisi titik mengambang), medan yang tidak berulang
Dapat dihasilkan secara real-time (bahkan dalam shader, yang cepat ), atau sebelumnya dan disimpan dalam tekstur, seperti pada contoh Anda
Perbatasan secara otomatis cocok karena Perlin dan simpleks bersambungan.
Meskipun medannya sendiri pseudo-acak, cukup mudah untuk menerapkan fungsi amplop atau cukup mengurangi jumlah oktaf di area di mana Anda memerlukan area datar atau fitur terain spesifik lainnya yang Anda butuhkan.
Lihat tautan ini untuk penjelasan yang cukup menyeluruh tentang implementasi 1D Perlin.
Amplop pada dasarnya adalah bidang skalar atau fungsi yang dikalikan dengan fungsi derau sebelum menyimpan atau menampilkan output Anda.
(Gambar awal dipinjam dari artikel yang disebutkan di atas.)
Dalam contoh ini, garis merah mewakili fungsi piecewise yang didefinisikan sebagai
... yang mungkin lebih baik didefinisikan menggunakan fungsi yang halus. Dalam hal ini, itu hanya skala ke 0 sebelum dataran tinggi, lalu kembali ke 1 sesudahnya.
Memperbarui
Berikut adalah contoh "medan" simpleks 3D dari salah satu proyek saya, dengan pencahayaan difus + specular yang diterapkan, seluruhnya dihasilkan dalam pipa vert + tess + frag shader. Untuk situasi Anda, saya akan mengambil irisan vertikal untuk mendapatkan kemiringan medan.
Dan pandangan ortografis top-down:
sumber