Menerapkan Ubin Pembuat RPG Otomatis

8

Saat ini saya bekerja dengan Phaser, membuat game yang dihasilkan secara prosedural. Saya ingin menggunakan beberapa seni pembuat RPG dalam game saya (untuk referensi, saya menggunakan RTP). Saya sengaja menemukan artikel ini , yang memecah bagaimana ubin otomatis bekerja. Saya juga menemukan jawaban ini yang menghubungkan ke artikel lain yang menjelaskan pemasangan otomatis.

Begini masalahnya, saya tidak tahu bagaimana saya akan mengimplementasikan sesuatu seperti ini. Saya yakin saya harus melacak set genteng mana yang dapat terhubung ke tileset lain (yaitu, beberapa ubin memiliki rumput di luar, dan pasir di dalam, jadi dalam contoh ini saya harus mencatat bahwa "rumput "ubin adalah ubin luar).

Saya telah membuat generator peta (lihat di sini ), dan saya ingin membuat koneksi yang mulus antara area ubin saya. Misalnya, area cokelat akan menjadi area "padat" (hutan, gua, dll). Area ungu akan menjadi lantai batu, dan area hijau adalah rumput. Ada tileset yang berfungsi sangat baik untuk hal-hal seperti ini:

masukkan deskripsi gambar di sini

Jadi saya ingin menggunakan rumput kiri atas, dan set ubin ketiga, batu, yang menghubungkan ke rumput.

Hal-hal apa yang harus saya pertimbangkan ketika menerapkan ubin otomatis menggunakan ubin jenis ini, dan apakah ada algoritma yang dapat saya lihat untuk diterapkan?

Seiyria
sumber
Tiled adalah editor peta sumber terbuka yang memiliki implementasi ubin otomatis. Anda dapat mencoba menemukan implementasinya dalam kode sumber .
Philipp
@Philipp Tiled dan paradigma autotiling RPGMaker berbeda. Ubin memungkinkan Anda menentukan empat sudut ubin sebagai jenis medan tertentu ("pasir", "rumput", "air", dan seterusnya) dan memilih ubin yang sesuai berdasarkan itu. RPGMaker memungkinkan Anda menentukan pusat ubin menjadi varian tipe-dikelilingi-oleh-jenis tertentu (misalnya "pasir di dalam rumput", "air di dalam rumput" dan sebagainya). Lapisan digunakan untuk menangani batasan ini dalam kedua kasus. Suatu transformasi mungkin, tentu saja; di sini misalnya menggunakan REFMAP pasir-dalam-rumput (dengan padding rumput): i.imgur.com/Z343MVq.png
Martin Sojka
2
Sebagai catatan, sumber daya RTP hanya dilisensikan untuk digunakan dengan perangkat lunak masing-masing dan versi RPG Maker lainnya. Ini baik-baik saja sebagai pengganti selama perkembangan, tetapi Anda akan perlu untuk menggantinya dengan satu set grafis yang berbeda untuk distribusi - misalnya REFMAP set atau grafis didasarkan pada Pixel Piala Dibebaskan.
Martin Sojka
Terima kasih atas kepala @MartinSojka - Baik atau buruk, pembuat RPG memberikan set lengkap karya seni terbaik (ubin, wajah, sprite, efek, dll.), Tapi saya telah membatasi apa yang saya gunakan, supaya saya bisa tutupi pangkalan saya ketika tiba saatnya untuk menggantinya. Saya hanya tidak ingin menghabiskan berjam-jam mencari seni ketika saya bisa pemrograman. Terima kasih atas info tentang Liberated Pixel Cup, saya akan memeriksanya nanti. FWIW, saya tidak berencana menjual game ini, tetapi jika saya melakukannya saya pasti akan mengganti art.
Seiyria

Jawaban:

1

Saya telah menerapkan ini (menggunakan RTP) dengan cara yang sederhana (tapi cukup membosankan).

Saya mengambil daftar semua tetangga untuk sel saat ini, dan dengan banyak ifpernyataan saya menggambar ubin sebagai 4 ubin lebih kecil / seperempat.

Bagi saya metode ini menyebabkan beberapa kesalahan yang hampir tidak terlihat, tetapi mereka dapat diselesaikan dengan menguji beberapa kasus tepi dan mengoreksi sesuai.

Jika Anda melihat gambar sumber dan gambar yang dihasilkan di pembuat RPG, Anda harus dapat melakukan ini (mungkin dengan beberapa trial-and-error) dengan ifpernyataan, mengidentifikasi apa kasus saat ini untuk ubin kuartal yang diberikan dan menggambar sesuai .

Metode ini dapat lebih ditingkatkan dan dibuat tidak terlalu membosankan dengan bitmask (seperti yang disebutkan oleh jzx).


Menjawab komentar Anda:

Dengan merender hanya seperempat ubin, kemungkinan berkurang secara dramatis.

Anda tidak harus menangani ubin di ubin, karena mereka harus berada pada lapisan yang berbeda sesuai urutan atau warna satu sama lain.

Juga, saya tidak mengerti mengapa Anda membutuhkan tetangga bawaan, tapi itu bisa ditangani secara terpisah dalam perhitungan tetangga, mungkin menggunakan semacam peta (daftar pasangan yang menyatu).

Peta biasanya statis, dan gambar-gambarnya rendah, jadi tidak perlu khawatir tentang kinerja.

akaltar
sumber
Saya sangat tertarik menggunakan bitmask, sampai saya melihat bahwa kompleksitas meningkat dengan setiap ubin tetangga yang mungkin. Melihat RTP, saya tidak bisa mengumpulkan berapa banyak kasus yang mungkin akan ada, mengingat bahwa beberapa ubin dapat ditumpuk di ubin lain, dan beberapa ubin memiliki tetangga built-in.
Seiyria
@ Seirya Diedit jawaban.
akaltar
terima kasih telah memperbarui. Satu hal, meskipun - Jika Anda melihat ubin di atas, Anda dapat melihat beberapa ubin memiliki tetangga built-in, seperti pasir di rumput atau ubin batu di rumput. Untuk beberapa ubin seperti yang air, yang dapat ditempatkan pada apa saja, ini bukan masalah.
Seiyria