Saya sedang mengerjakan mesin game multiplayer server-klien 2D (yang bisa Anda coba di sini ). Ini menggunakan DataChannel
s WebRTC . (Koneksi peer-to-peer, tetapi host host masih bertindak sebagai server.)
Masalah terbesar (terlepas dari konektivitas) adalah prediksi input lokal. Kami melakukan hal yang biasa: Pada penekanan tombol, pemain bergerak secara instan, memberi tahu tuan rumah tombol apa yang ditekan, menerima data kembali dari tuan rumah dan membandingkannya dengan posisi historis. Posisi diperbaiki dari waktu ke waktu jika ada perbedaan. Ini berfungsi baik dengan packet loss atau PDV yang rendah , bahkan jika pingnya tinggi.
Jika ada kerugian atau PDV, penyimpangan bisa lebih besar. Saya pikir ini karena jika paket pertama yang menunjukkan perubahan input ditunda atau dihapus, tuan rumah mengetahuinya nanti, dan mulai mengubah pemain itu lebih lambat dari yang ditunjukkan oleh prediksi input lokal mereka.
Jika pemain bergerak, kami menaikkan jumlah koreksi yang diterapkan, karena itu kurang terlihat. Ini tampaknya menutupi celah saat mulai bergerak dan saat bergerak. Namun, koreksi apa pun lebih terlihat jika mereka berhenti mendadak. Kemudian jika PDV atau kerugian berarti tuan rumah berpikir mereka berhenti kemudian, tuan rumah melakukan overshoot, mengirim kembali data yang mengatakan mereka sedikit lebih jauh ke depan, dan koreksi membuat pemain melayang sedikit. Pada koneksi yang tidak stabil, pemain sering terlihat melayang setelah berhenti.
Saya tidak melihat ini di game lain. Bagaimana ini bisa dikurangi?