Saya adalah pengembang game pemula dan saya telah meneliti tentang game multi-pemain. Saya mengamati bahwa selalu ada latensi, para pemain selalu mendapatkan pembaruan dari tindakan sebelumnya. Tetapi ada teknik seperti perhitungan mati untuk menangani latensi. Saya bisa memprediksi gerakan dan membuat gerakan halus. Tetapi bagaimana saya melakukan tindakan sinkronisasi seperti melompat, berhenti berjalan, dll.
Misalkan, klien A bergerak, ia berada pada kecepatan 100 m pada waktu 10,2 dengan kecepatan 100 m / detik dan mengirimkan informasi ini. Klien B akan menerima informasi ini agak terlambat, biarlah 10.4. Jadi pada klien B, saya dapat menggunakan prediksi dan menempatkan klien A pada jarak 120 m. Tetapi bagaimana jika, klien melompat 110 m pada 10,3. Saya tidak dapat memprediksi itu dan karena saya telah menggunakan prediksi saya tidak dapat menunjukkan lompatan klien di masa lalu.
Saya dapat mengatasi masalah ini dengan tidak mengirimkan aksi lompatan sama sekali. Tetapi bagaimana jika permainan saya memiliki beberapa kekosongan di mana pemain bisa jatuh dan mati. Jadi, Jika saya tidak menyinkronkan aksi lompatan, pemain lain akan mengamati bahwa satu pemain sedang berlari maka ia jatuh batal dan sekali lagi muncul di layar menghancurkan pertunangan visual.
Lompat hanyalah sebuah contoh, mungkin ada banyak skenario di mana prediksi tidak dapat berfungsi. Jadi, Bagaimana cara menghadapinya. Salah satu contohnya bisa berupa game arena pertempuran Online Multi Pemain seperti Awesomenauts.
sumber
Jawaban:
Perhitungan mati mungkin bukan ide terbaik dalam kasus ini; Anda harus melakukan interpolasi entitas (memberikan secara efektif pemain lain di masa lalu, yang selalu memberi Anda posisi yang nyata dan valid). Saya telah menulis tentang ini dengan lebih detail di sini . Apakah melihat sedikit pemain di masa lalu dapat diterima atau tidak tergantung pada detail dari apa yang Anda coba lakukan.
sumber
Ada tulisan yang cukup rinci tentang mesin sumber. Akan muncul beberapa kode sumber yang relevan juga tersedia sebagai bagian dari SDK Sumber.
https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
Ini menggunakan sejumlah teknik untuk mencoba dan menangani latensi jaringan dalam model server-klien. Poin utama tampaknya adalah bahwa klien lokal menangani input dan acara lainnya secara lokal seolah-olah tidak ada server, dan kemudian berurusan dengan kemungkinan server mengatakan klien melakukan kesalahan nanti.
sumber