Haruskah saya berbagi struktur ubin yang sama untuk tampilan dan penelusuran jalan?


8

Saya tahu cara menampilkan peta 2D dengan ubin.

Saya tahu cara membuat algoritma pathfinding menggunakan A *.

Dua hal itu menuntut struktur atau kelas. Pertanyaan saya adalah: apakah Anda menggunakan struktur yang sama untuk menampilkan dan menghitung jalur? Struktur simpul untuk permintaan pathfinding untuk menambahkan beberapa data: posisi x, posisi y, F, G, H ditambah Node Induk. Struktur ubin untuk tampilan dapat dioptimalkan untuk hampir hanya satu informasi: nilai ubin.

Apakah Anda menggunakan kelas besar untuk ubin Anda, yang menangani tampilan dan pathfinding, atau apakah Anda menggunakan metode yang berbeda? Terima kasih atas saran Anda!


Pertanyaan yang luar biasa, saya benar-benar perlu mempelajari ini tetapi saya tidak tahu harus bertanya apa.
DFectuoso

Jawaban:


6

Pertanyaan saya adalah: apakah Anda menggunakan struktur yang sama untuk menampilkan dan menghitung jalur?

Tidak, saya tidak. Anda bisa mendapatkan beberapa optimasi dari menghitung A * Anda langsung ke ubin-peta, tetapi kemudian Anda tidak dapat dengan mudah menggunakan algoritma A * Anda untuk hal-hal yang tidak memetakan langsung ke ubin. Juga, itu berarti Anda tidak dapat menjalankan algoritma A * secara bersamaan di banyak utas karena mereka akhirnya berbagi data peta. Akhirnya, metode pemindahan tertentu tidak mengizinkan ubin = optimisasi simpul; kendaraan yang membutuhkan ruang untuk berputar dapat berpotensi tiba di ubin yang sama dari arah yang berbeda dan memiliki opsi yang berbeda di setiap kasus - mereka tidak dapat digabung menjadi satu skor.

Jadi saya sarankan memisahkan data.


Meskipun menarik untuk memisahkan mereka, Anda tidak perlu menggunakan grafik eksplisit untuk pencarian jalur, Anda dapat memiliki "tilemap" hanya dengan informasi tabrakan / biaya, benar-benar terpisah dari rendering dan dari model logis. Misalnya, jika Anda menambahkan objek ke dunia yang tidak disimpan di tilemap, tetapi hanya menggunakan (x, y) koordinat Anda masih bisa meletakkannya di peta tabrakan dan menggunakannya untuk pencarian jalur berbasis grid.
Trinidad

3

Dari perspektif pengembangan perangkat lunak, selalu baik untuk memisahkan hal-hal yang berbeda .

Untuk solusi cepat dan kotor, kumpulkan semuanya dan mulailah mengerjakan spesifik game.

Untuk solusi yang dapat diperpanjang, pisahkan semuanya: Anda tidak ingin mengubah kelas ubin karena algoritme pathfinding Anda berubah! Pertahankan dua struktur: satu mewakili ubin permainan yang terlihat dan satu mewakili struktur pencarian jalan. Idealnya, algoritma pathfinding dijaga agar tetap rendah, jadi mungkin array x, y menunjuk sebagai input ke algoritma adalah ide yang lebih baik daripada menyediakannya dengan kelas ubin Anda. Algoritme itu sendiri dapat mengatur array untuk nilai F, G, H.

Saya pikir dalam kasus ini (dan saya berasumsi bahwa Anda berusaha untuk menjadi programmer yang baik), Anda harus mencari solusi yang dapat diperpanjang, karena itu tidak akan membawa Anda banyak usaha ekstra tetapi itu membuat kode Anda lebih bersih dan Anda akan mendapatkan latihan yang baik pengalaman.


2

Saya pernah membangun game berbasis amiga di Amiga 500 dengan 512x512 ubin tetapi pemain hanya bisa memindahkan 8 ubin, jadi saya membuat "9x9" ubin "peta dinding" pr. tentara. Jika saya melakukan ini dengan peta asli, pertama-tama saya harus "membersihkannya" setelah setiap perhitungan + jumlah memori yang diperlukan untuk memiliki kedua data petak + data pathfinding akan membuat 512x512 menjadi memori yang jauh lebih besar.

Jadi tidak, pertahankan hal-hal sekecil mungkin dan pisahkan sehingga Anda dapat mengubah pr mereka. objek / kelas jika perlu. Hal lain untuk dipikirkan mungkin juga bahwa beberapa objek bergerak Anda MUNGKIN bergerak secara berbeda pada bagian-bagian tertentu dari peta. Misalnya. lambat di pasir, bisa / tidak bisa berenang, bisa membuka pintu dll.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.