Representasi level / data yang sesuai untuk game platfrom 2D?

9

Saya akan memprogram salinan Mario di Jawa. Saya sedang memikirkan 2 representasi / struktur data untuk level tetapi saya tidak yakin mana yang harus saya pilih:

  • Array integer 2D.
  • Quadtree untuk membagi level menjadi beberapa bagian.

Apa kelebihan dan kekurangannya?

Rama
sumber

Jawaban:

9

Maksud dari quadtree adalah untuk secara efisien menyisihkan potongan besar data sehingga Anda hanya menghabiskan waktu pada data di sekitarnya. Namun, array 2D sudah memberi Anda akses acak khusus lokasi, jadi untuk game 2D yang dapat membuat quadtree berlebihan. Dalam gim 3D, Anda tidak dapat menggunakan larik untuk menemukan segalanya dan di situlah quadtrees (atau lebih baik lagi, bahkan juga oktri) berguna.

Sekarang, saya sedang berbicara di sini tentang representasi data yang mendasari untuk tingkat. Bergantung pada bagaimana pengaturan arsitektur grafis Anda (mis. Melakukan grafik 2D dengan pesawat dalam mesin 3D), Anda mungkin ingin menggunakan quadtrees dalam grafik adegan untuk secara efisien memusnahkan konten grafis.

Dan jangan lupa berbagai musuh dan objek interaktif lainnya di level Anda. Mungkin Anda menggunakan array 2D untuk mengelola ubin level, tetapi menggunakan quadtrees untuk mengatur semua elemen interaktif (mis. Untuk mesin fisika).


Pikirkan seperti ini: pilih satu titik secara acak di tingkat Anda, dan kemudian pikirkan tentang berapa banyak pekerjaan yang diperlukan untuk mengetahui semuanya dalam radius 1000 piksel dari titik itu. Jika Anda bisa melakukannya dengan cepat karena semuanya diatur oleh lokasi dalam array 2D, maka Anda tidak perlu quadtree. Namun jika Anda harus mengulang semua dan memeriksa jarak masing-masing objek secara terpisah, maka Anda dapat membuat pencarian jauh lebih efisien dengan menggunakan quadtree.

jhocking
sumber