Saya sedang mengerjakan editor peta ubin, dan saya harus memilih ubin secara otomatis, berdasarkan ubin yang berdekatan. Misalnya, ketika menempatkan ubin jalan, di sebelah ubin jalan lain, keduanya harus berorientasi sehingga mereka membentuk jalan yang berkelanjutan. Jika ada jalan lain di sekitarnya, kita mungkin perlu menggunakan ubin sudut atau persimpangan.
Adakah yang bisa merekomendasikan beberapa algoritma untuk melakukan ini? Permainan ini menggunakan peta ubin persegi 8-arah.
Jawaban:
Mungkin ini yang biasanya dilakukan. Anda memiliki daftar petak berbeda yang mewakili petak jalan di semua orientasi yang dimungkinkan. Kiri ke kanan, keempat sudut, atas ke bawah, apa pun. Sekarang Anda akan mengindeks semua ubin dengan byte masing-masing. 8 bit, satu untuk setiap arah. Ini bisa berupa hashmap atau dengan nama file ... namun Anda ingin melakukan ini.
Jadi Anda punya ini:
Kode byte untuk ubin di atas adalah 00000000 . Maka ubin Anda yang bergerak dari kiri ke kanan (atau kanan ke kiri) adalah seperti ini:
Kode byte untuk ubin itu adalah 10001000 , atau 136. Sebagai contoh lain, mari kita lihat persimpangan tiga arah:
Kode byte untuk ubin itu adalah 10101000 .
Anda mungkin melihat ke mana saya pergi. Anda mengatur posisi bit dalam byte yang mewakili koneksi. Ini jauh lebih baik daripada mencoba melakukan rantai besar jika / selain yang pernah saya lihat sebelumnya. Saat Anda mencari untuk menempatkan ubin, periksa ubin di sekitarnya dan buat byte di sepanjang jalan. Tetapkan 1's untuk ubin yang memiliki jalan (atau apa pun yang Anda ingin hubungkan) dan 0's untuk ubin yang tidak. Setelah selesai, Anda akan memiliki kode byte untuk ubin persis yang Anda butuhkan.
Perhatikan bahwa saat membuat aset, Anda dapat menggunakan kembali banyak dari aset tersebut hanya dengan memutar dan menetapkan kode byte yang benar.
Sunting : Gambar yang diperbarui menjadi kurang jelek. Ya itu lebih baik dari sebelumnya.
sumber
Saya akan merekomendasikan Anda melihat halaman praktis ini untuk informasi lebih lanjut, karena ia menjelaskan secara rinci tentang hampir setiap aspek dari apa yang Anda lakukan, serta beberapa optimasi potensial: http://www.angryfishstudios.com / 2011/04 / adventure-in-bitmasking /
Tldr adalah bahwa Anda kueri setiap sel yang berdekatan dan menyimpan kombinasi dalam bitfield / byte, kemudian meneruskannya melalui peta yang mengubah angka dari 0 ~ 255 menjadi nilai dari 0 ~ 47, yang sesuai dengan gambar unik.
sumber