Saya sadar bagaimana mendeteksi jika dua atau lebih objek 2D bertabrakan, tetapi saya tertarik bagaimana memutuskan apakah akan memeriksa tabrakan. Dalam proyek-proyek sebelumnya, saya baru saja memeriksa setiap objek terhadap setiap objek lain (saya tahu, O (n ^ 2) tingkat kebodohan) dan itu menciptakan gameplay yang kurang lancar.
Berbagai forum memuji kehebatan Quadtrees, B-Trees, dan jenis pohon atau struktur apa pun yang dapat Anda pikirkan.
Apa struktur yang paling efisien untuk menentukan apakah tumbukan harus diperiksa?
2d
collision-detection
data-structure
Mike Cluck
sumber
sumber
Jawaban:
Untuk gim 2d, kecuali objek 2D memiliki distribusi yang sangat berat ke satu sisi peta Anda, kisi yang seragam hampir selalu merupakan cara untuk melakukannya. Kompleksitas memori lurus ke depan, (sebanding dengan dimensi peta Anda), dan dengan distribusi yang masuk akal, memiliki O (1) waktu pencarian dan rata-rata log (numberOfObjects / (baris * kolom)) ^ 2 tes persimpangan dilakukan per sel. Anda mungkin memutuskan untuk hanya memeriksa sel-sel yang memiliki objek bergerak di dalamnya, yang membuat geometri statis jauh lebih efisien. Sangat mudah untuk memodifikasi grid yang seragam dengan cepat, (jauh lebih sedikit daripada solusi berbasis pohon), dan lebih mudah untuk diterapkan. Satu-satunya waktu saya akan mengatakan untuk tidak menggunakannya dalam permainan 2D adalah ketika persyaratan memori dari grid yang seragam menjadi terlalu besar, (misalnya ruang sim di mana levelnya jarang tetapi sangat besar).
sumber
Mesin Fisika 2D seperti Box2D dan Chipmunk, banyak menggunakan Peta Hash spasial
lihat http://chipmunk-physics.net/release/ChipmunkLatest-Docs/#CollisionDetection untuk referensi. Demo chipmunk termasuk visualisator hash spasial yang sangat baik yang membuatnya sangat jelas bagaimana teknik mereka bekerja.
sumber
Jika dunia Anda memiliki satu dimensi yang sangat "panjang" (sebut saja X), dibandingkan dengan yang lain, Anda dapat menyimpan objek dalam daftar berurutan yang dapat Anda sortir kembali saat mereka bergerak, dan kemudian deteksi tabrakan berarti hanya memeriksa objek yang tumpang tindih pada sumbu X.
Kemungkinan lain adalah menyimpan daftar objek aktif / pasif, dan tidak repot-repot dengan objek pasif (yang tidak bergerak sama sekali).
Jika mereka semua benda berukuran sedang yang dapat dilihat oleh pemain di layar, semuanya vs semuanya mungkin tidak terlalu buruk.
Selain itu, saya dengan Darcy, kotak seragam itu bagus.
sumber