Saya sedang mengerjakan RPG 2D, yang akan menampilkan peta penjara bawah tanah / kota biasa (pra-dibuat).
Saya menggunakan ubin, yang kemudian saya gabungkan untuk membuat peta. Rencana awal saya adalah merakit ubin menggunakan Photoshop, atau program grafis lainnya, untuk memiliki satu gambar lebih besar yang kemudian dapat saya gunakan sebagai peta.
Namun, saya telah membaca di beberapa tempat orang berbicara tentang bagaimana mereka menggunakan array untuk membangun peta mereka di mesin (jadi Anda memberikan array x ubin ke mesin Anda, dan itu mengumpulkan mereka sebagai peta). Saya dapat memahami bagaimana ini dilakukan, tetapi tampaknya jauh lebih rumit untuk diterapkan, dan saya tidak dapat melihat manfaat yang jelas.
Apa metode yang paling umum, dan apa kelebihan / kekurangan masing-masing?
Jawaban:
Pertama, izinkan saya mengatakan bahwa RPG 2D dekat dan sangat saya sukai dan bekerja dengan mesin MORPG DX7 VB6 lama (jangan tertawa, itu 8 tahun yang lalu, sekarang :-)) adalah hal pertama yang membuat saya tertarik pada pengembangan game . Baru-baru ini, saya mulai mengubah gim yang saya garap di salah satu mesin itu untuk menggunakan XNA.
Yang mengatakan, rekomendasi saya adalah bahwa Anda menggunakan struktur berbasis ubin dengan layering untuk peta Anda. Dengan API grafik apa pun yang Anda gunakan, Anda akan memiliki batasan ukuran tekstur yang dapat Anda muat. Belum lagi batas memori tekstur kartu grafis. Jadi, mengingat ini, jika Anda ingin memaksimalkan ukuran peta Anda sementara tidak hanya meminimalkan jumlah dan ukuran tekstur yang Anda muat ke dalam memori, tetapi juga mengurangi ukuran aset Anda pada hard drive pengguna DAN waktu muat, Anda pasti akan ingin pergi dengan ubin.
Sejauh implementasi berjalan, saya telah masuk ke detail tentang bagaimana saya menanganinya pada beberapa pertanyaan di sini di GameDev.SE dan di blog saya (keduanya terhubung di bawah), dan bukan itu yang Anda tanyakan jadi saya hanya akan masuk ke dasar-dasar di sini. Saya juga akan mencatat fitur ubin yang menjadikannya bermanfaat daripada memuat beberapa gambar besar yang telah dibuat sebelumnya. Jika ada yang tidak jelas, beri tahu saya.
OK, sekarang setelah Anda memecah tilesheet menjadi serangkaian sel (angka), Anda dapat mengambil angka-angka itu dan memasukkannya ke dalam wadah apa pun yang Anda suka. Demi kesederhanaan, Anda bisa menggunakan array 2D.
Selanjutnya, Anda ingin menggambar mereka. Salah satu cara Anda dapat membuat BANYAK ini lebih efisien (tergantung pada ukuran peta) adalah menghitung hanya sel-sel yang sedang dilihat kamera dan memutarnya. Anda dapat melakukan ini dengan mengambil koordinat larik ubin peta dari sudut kiri atas (
tl
) danbr
sudut kanan bawah ( ). Kemudian loop daritl.X to br.X
dan, dalam loop bersarang, daritl.Y to br.Y
untuk menggambar mereka. Contoh kode di bawah ini:Catatan: Saya mengabaikan konsep koordinat dunia (yang menjadi dasar posisi kamera Anda) karena itu, saya pikir, berada di luar cakupan jawaban ini. Anda dapat membaca tentang itu di sini di GameDev.SE.
Sumber Daya Mesin Ubin Saya
Catatan: Semua ini ditargetkan pada XNA, tetapi cukup banyak berlaku untuk apa pun - Anda hanya perlu mengubah panggilan undian.
Sumber Daya Mesin Ubin Lainnya
sumber
Baik sistem berbasis ubin dan model statis / sistem tekstur dapat digunakan untuk mewakili dunia dan masing-masing memiliki kekuatan yang berbeda. Apakah yang satu lebih baik daripada yang lain bermuara pada bagaimana Anda menggunakan potongan-potongan itu, dan apa yang paling cocok untuk keahlian dan kebutuhan Anda.
Itu dikatakan kedua sistem dapat digunakan secara terpisah, atau juga bersama-sama.
Sistem berbasis ubin standar memiliki kekuatan berikut:
Kerugian dari ubin adalah Anda harus membuat sistem untuk membangun data berbasis ubin ini. Anda bisa membuat gambar yang menggunakan setiap piksel sebagai ubin, sehingga menciptakan array 2D Anda dari tekstur. Anda juga dapat membuat format berpemilik. Menggunakan bitflag, Anda dapat menyimpan sejumlah besar data per ubin dalam ruang yang cukup kecil.
Alasan utama kebanyakan orang membuat ubin adalah karena memungkinkan mereka untuk membuat aset kecil dan menggunakannya kembali. Ini memungkinkan Anda membuat gambar yang jauh lebih besar akan potongan yang lebih kecil. Ini mengurangi pengerjaan ulang karena Anda tidak mengubah seluruh peta dunia untuk membuat perubahan kecil. Misalnya jika Anda ingin mengubah naungan semua rumput. Dalam gambar besar Anda harus mengecat ulang semua rumput. Dalam sistem ubin, Anda cukup memperbarui ubin rumput.
Secara menyeluruh Anda akan menemukan diri Anda melakukan lebih sedikit pengerjaan ulang dengan sistem berbasis ubin daripada peta grafis besar. Anda mungkin akhirnya menggunakan sistem berbasis ubin untuk tabrakan bahkan jika Anda tidak menggunakannya untuk peta dasar Anda. Hanya karena Anda menggunakan ubin secara internal tidak berarti Anda tidak dapat menggunakan model untuk mewakili objek lingkungan yang mungkin menggunakan lebih dari 1 ubin untuk ruang mereka.
Anda perlu memberikan lebih spesifik tentang lingkungan / mesin / bahasa Anda untuk memberikan contoh kode.
sumber
Menggambar peta: Ubin mudah di mesin, karena dengan demikian peta dapat direpresentasikan sebagai array indeks ubin raksasa. Kode undian hanyalah loop bersarang:
Untuk peta besar, satu gambar bitmap besar untuk seluruh peta bisa memakan banyak ruang dalam memori, dan bisa lebih besar dari apa yang didukung kartu grafis untuk ukuran gambar tunggal. Tetapi Anda tidak akan memiliki masalah dengan ubin karena Anda hanya mengalokasikan memori grafis satu kali untuk setiap ubin (atau satu total, secara optimal, jika semuanya ada di satu lembar)
Juga mudah untuk menggunakan kembali informasi petak untuk mis. Tabrakan. misalnya, untuk mendapatkan petak medan di sudut kiri atas sprite karakter:
Misalkan Anda perlu memeriksa tabrakan terhadap batu / pohon dll. Anda bisa mendapatkan ubin di posisi (posisi karakter + ukuran karakter sprite + arah saat ini) dan periksa apakah itu ditandai walkable atau tidak walkable.
sumber