Saya membuat game balap sederhana (pesawat ruang angkasa, tanpa gravitasi) menggunakan p2.js, phaser, dan node.js.
Apa yang telah saya lakukan: Klien menerima status dunia dari server:
- ekstrapolasi pemain lain berdasarkan kecepatan / posisi terbaru dari server
- periksa apakah prediksi sisi klien benar - jika tidak ada posisi yang berlaku dari server dan proses input yang tidak disadari server.
- langkah fisika tetap
Server:
- menerima input dari klien dan melamar
- langkah fisika tetap
- mengirimkan negara dunia ke setiap klien
Sekarang saya berjuang dengan tabrakan antar pemain. Pemain yang bertabrakan melompat sepanjang waktu selama tabrakan. Saya pikir itu karena prediksi sisi klien tidak menghitung hasil yang mirip dengan server.
Server tidak tahu semua input dari pemain (lag).
Pemain tidak memiliki posisi yang sama untuk bertabrakan dengan server (lag).
Menggabungkan kedua ini membuat klien untuk menyelesaikan tabrakan berbeda dari server dan ketika negara dunia tiba pemain harus membuat koreksi besar.