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.
- Hal pertama yang perlu Anda lakukan adalah membuat tilesheet. Ini hanya gambar besar yang berisi semua ubin Anda selaras dalam kotak. Ini (dan mungkin yang ekstra tergantung pada jumlah ubin) akan menjadi satu-satunya hal yang perlu Anda muat. Hanya 1 gambar! Anda bisa memuat 1 per peta atau satu dengan setiap ubin di dalam game; organisasi apa pun yang bekerja untuk Anda.
- Selanjutnya, Anda perlu memahami bagaimana Anda dapat mengambil "lembar" itu dan menerjemahkan setiap ubin menjadi angka. Ini cukup mudah dengan beberapa matematika sederhana. Perhatikan bahwa pembagian di sini adalah pembagian bilangan bulat , sehingga tempat desimal dijatuhkan (atau dibulatkan ke bawah, jika Anda mau).
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.
int[,] mapTiles = new int[100,100]; //Map is 100x100 tiles without much overhead
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
) dan br
sudut kanan bawah ( ). Kemudian loop dari tl.X to br.X
dan, dalam loop bersarang, dari tl.Y to br.Y
untuk menggambar mereka. Contoh kode di bawah ini:
for (int x = tl.X; x <= br.X;x++) {
for (int y = tl.Y; y <= br.Y;y++) {
//Assuming tileset setup from image
Vector2 tilesetCoordinate = new Vector2((mapTiles[x,y] % 8) * 32,(mapTiles[x,y] / 8) * 32);
//Draw 32x32 tile using tilesetCoordinate as the source x,y
}
}
- Jackpot! Itulah dasar-dasar dari mesin genteng. Anda dapat melihat bahwa memiliki peta 1000x1000 dengan biaya overhead yang tidak banyak. Juga, jika Anda memiliki kurang dari 255 ubin, Anda bisa menggunakan array byte yang mengurangi memori sebesar 3 byte per sel. Jika byte terlalu kecil, ushort mungkin cukup untuk kebutuhan Anda.
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.
- Jawaban saya untuk pertanyaan ini menguraikan bagaimana saya menangani sel-sel peta dan layering dalam permainan saya. (Lihat tautan ketiga.)
- Jawaban saya untuk pertanyaan ini menjelaskan bagaimana saya menyimpan data dalam format biner.
- Ini adalah posting blog pertama (baik, secara teknis kedua, tetapi pertama "teknis") tentang pengembangan game yang sedang saya kerjakan. Seluruh seri berisi informasi tentang hal-hal seperti pixel shaders, pencahayaan, perilaku ubin, gerakan dan semua hal yang menyenangkan. Saya benar-benar memperbarui posting untuk memasukkan konten jawaban saya ke tautan pertama yang saya posting di atas, jadi Anda mungkin ingin membacanya (saya mungkin telah menambahkan beberapa hal). Jika Anda memiliki pertanyaan, Anda dapat memberikan komentar di sana atau di sini dan saya akan dengan senang hati membantu.
Sumber Daya Mesin Ubin Lainnya
- Tutorial mesin ubin dari situs ini memberi saya dasar yang saya gunakan untuk membuat peta saya.
- Saya belum benar - benar menonton tutorial video ini karena saya belum punya waktu, tetapi mungkin bermanfaat. :) Mereka mungkin sudah ketinggalan zaman, jika Anda menggunakan XNA.
- Situs ini memiliki beberapa tutorial yang (saya pikir) didasarkan pada video di atas. Mungkin perlu dicoba.