Saya menggunakan Direct3D dengan pembungkus D3DXSPRITE untuk menggambar ubin ke layar. Saya memiliki kelas ubin yang berisi anggota seperti tabrakan dan jenis ubin, lalu saya memiliki array ubin misalnya
Kisi genteng [256] [256];
Metode mana yang lebih baik?
-Gambar pemain di tengah layar dan offset di mana peta menarik.
-Pindahkan pemain dengan mengikuti kamera.
Saya menggunakan metode pertama, tetapi semakin rumit ketika Anda sampai di tepi kiri atas peta, dan ketika pemain / musuh lain ada di peta dan bergerak pada saat yang sama
jika saya membuat kamera mengikuti pemain, apakah saya harus memanggil spriteBatch-> Draw (...) untuk setiap kotak petak tunggal meskipun hanya sedikit yang bisa muat di layar?
Memindahkan kamera dalam koordinat dunia dan membuat karakter Anda bergerak di seluruh dunia adalah cara termudah untuk mendekati masalah ini, bekerja dalam koordinat dunia berarti Anda tidak perlu melakukan perhitungan tambahan saat itu mengarah ke semua sistem lain yang harus bekerja pada sebuah sistem koordinat relatif dan juga memahami di mana mereka berada di koordinat dunia.
Karena Anda bekerja dalam 2D, tip lain yang baik adalah melakukan partisi spasial, cara termudah adalah membuat sistem jaringan dunia virtual, ini akan memungkinkan Anda untuk mengelola setiap ubin secara individual dengan mengaitkan sprite dan sumber daya lainnya pada basis per ubin, jadi pada dasarnya prosesnya adalah:
buat beberapa kelas ubin yang dapat memegang koordinat batas untuk ubin dan sumber daya apa pun yang ubin tertentu mungkin perlu (sprite, musuh, dll.).
tentukan ukuran dunia Anda dan buat array 2D (Anda bisa menggunakan satu dimensi dan akses sebagai 2D) ubin yang masing-masing mewakili sedikit dunia Anda dengan semua sumber daya yang terkait.
hanya menarik sumber daya dari ubin pemain dan tetangga-tetangganya.
Dengan kisi, Anda dapat dengan mudah mengetahui petak pemain yang ada di berdasarkan posisi itu relatif terhadap awal kisi.
Untuk mengatasi masalah yang Anda sebutkan tentang kamera Anda perlu membuat pemain dan kamera dua sistem independen di mana kamera tidak akan melakukan perjalanan lebih jauh dari pusat ubin tepi sehingga ketika pemain melakukan perjalanan ke ubin itu ia masih bisa melakukan perjalanan di seluruh seluruh ubin karena ia terikat oleh koordinat dunia (yaitu tidak lagi terpusat di layar) tetapi kamera terkunci.
sumber
Saya menggunakan permukaan. Saya membuat seluruh dunia pada permukaan layar dan menjaga koordinat x dan y. Saya mengubah ini saat pemain bergerak dan setiap frame menggambar 1028 x 768 persegi panjang dari permukaan ke backbuffer menggunakan x dan y.
Adapun orang lain saya memberi mereka x dan y dan membiarkan mereka bergerak di seluruh dunia sesuka mereka, ketika menggambar saya memeriksa apakah ada x dan y dalam persegi panjang 1028 x 768 dan jika demikian menggambar mereka (saya menggunakan tekstur untuk orang-orang) .
Saya memiliki pemain di tengah layar dan memeriksa apakah ujung dunia telah mencapai tepi layar. Dalam keadaan ini, pemain bergerak tentang layar ke ujung dunia dan kembali ke tengah lalu dunia mulai bergerak lagi. sepertinya sulit dan butuh saya beberapa saat tetapi tidak terlalu buruk untuk dilakukan.
Saya menggunakan 64 x 64 ubin dan dunia terbesar yang saya gunakan sejauh ini adalah 50 x 60 ubin.
Ini semua dilakukan dalam x langsung dengan c ++
sumber
Kode ini cukup normal untuk mendapatkan sedikit rasa sakit di sudut-sudut dunia ubin, ketika mencari tahu gambar mana yang akan diambil, dan secara bersamaan memastikan kamera tidak pergi 'di luar dunia'. Casing tepi itu pada dasarnya adalah hal paling rumit tentang penerapan dunia berbasis ubin 2D yang lebih besar dari resolusi layar. Semakin rumit jika Anda mendukung pembesaran, dan memperbesar-ke-kursor: D
sumber