Baru-baru ini saya telah mengerjakan penembak 2d yang bergerak cepat dan saya menemukan masalah besar. Deteksi tabrakan. Tentu, ini bekerja, tetapi sangat lambat. Tujuan saya adalah: Miliki banyak musuh di layar dan minta mereka untuk tidak saling menyentuh. Semua musuh mengejar entitas pemain. Sebagian besar dari mereka memiliki kecepatan yang sama sehingga cepat atau lambat mereka semua berakhir mengambil ruang yang sama saat mengejar pemain. Ini benar-benar menjatuhkan faktor kesenangan karena, bagi pemain, sepertinya Anda dikejar oleh satu musuh saja. Untuk mencegah mereka mengambil ruang yang sama saya menambahkan deteksi tabrakan (deteksi 2D yang sangat mendasar, satu-satunya metode yang saya tahu) yang.
Enemy class update method
Loop through all enemies (continue; if the loop points at this object)
If enemy object intersects with this object
Push enemy object away from this enemy object
Ini berfungsi dengan baik. Selama aku hanya punya <200 entitas musuh. Ketika saya mendekati 300-350 entitas musuh, frame rate saya mulai turun drastis. Pertama saya pikir itu rendering yang buruk jadi saya menghapus panggilan imbang mereka. Ini tidak membantu sama sekali jadi tentu saja saya menyadari itu adalah metode pembaruan. Satu-satunya bagian berat dalam metode pembaruan mereka adalah bagian ini masing-masing musuh-loop-melalui-setiap-musuh. Ketika saya mendekati 300 musuh, game melakukan iterasi langkah 90000 (300x300). My my ~
Saya yakin pasti ada cara lain untuk mendekati deteksi tabrakan ini. Meskipun saya tidak tahu caranya. Halaman yang saya temukan adalah tentang bagaimana sebenarnya melakukan tabrakan antara dua objek atau bagaimana memeriksa tabrakan antara objek dan ubin. Saya sudah tahu dua hal itu.
tl; dr? Bagaimana cara mendekati deteksi tabrakan antara LOTS entitas?
Sunting cepat: Jika ada bantuan, saya menggunakan C # XNA.