Pertanyaan ini agak sulit, tetapi saya akan mencoba menjelaskannya.
Katakanlah saya sedang membangun game online (bukan skala MMO), tapi itu mendukung pemain sebanyak mungkin, dalam pendekatan server otoritatif. Saya ingin dunia yang sangat besar dengan banyak musuh yang disimulasikan AI.
Saya menyadari beberapa strategi untuk menghemat CPU server dengan membagi ruang dan tidak memproses apa yang tidak perlu diproses. Saya telah membagi dunia berdasarkan wilayah, yang membutuhkan waktu pemuatan dan transisi kecil, yang menurut saya penting untuk menjaga kualitas permainan saat bermain secara lokal (sendirian atau bahkan dengan beberapa teman). Saya tidak berharap para pemain berada di lebih dari satu atau dua wilayah.
Masalahnya adalah suatu daerah bisa menjadi sangat besar, dan memiliki banyak NPC yang disimulasikan sekaligus. Bagaimana saya menangani ini tanpa mempengaruhi pengalaman para pemain? Pendekatan seperti satu server per wilayah dan sama-sama tidak ada dalam tabel.
Saya terutama mencari struktur data untuk menampung gerombolan musuh, dan bahkan NPC yang damai. Untuk menyelesaikan pertanyaan, harap perhatikan bahwa ada kendaraan, oleh karena itu sangat cepat untuk bepergian dalam suatu wilayah, yang mempengaruhi "kapan" untuk menyisihkan area.
Jawaban:
Dari apa yang saya mengerti Anda akan memiliki semacam fisika yang berjalan di server Anda.
Jika itu masalahnya ada juga teknik lain yang tersedia untuk AI / fisika selain partisi ruang. Dari yang paling tidak jelas:
Setelah Anda menerapkan mekanisme ini, Anda dapat memutuskan seberapa banyak dan seberapa sering Anda membutuhkannya. Hal yang hebat tentang ini adalah bahwa nanti Anda dapat menambahkan beberapa server yang akan dapat mengambil alih beberapa tugas alih-alih aplikasi klien.
Tentu saja deteksi tabrakan yang diperkirakan akan membuat beberapa penyimpangan, tetapi Anda akan dapat menyelesaikannya dengan menambahkan lebih banyak presisi dari waktu ke waktu.
Juga mengenai fisika Anda harus melihat lib yang mendukung semacam sistem GPGPU seperti OpenCL atau CUDA jika Anda memiliki akses ke server yang mendukung keduanya.
sumber