Saat ini dalam permainan saya, klien tidak lain adalah penyaji. Ketika kondisi input diubah, klien mengirim paket ke server dan menggerakkan pemain seolah-olah sedang memproses input, tetapi server memiliki keputusan akhir pada posisi tersebut.
Ini umumnya bekerja dengan sangat baik, kecuali untuk satu masalah besar: jatuh dari tepi. Pada dasarnya, jika seorang pemain berjalan menuju tepi, katakan sebuah tebing, dan berhenti tepat sebelum keluar dari tepi, kadang-kadang sedetik kemudian, ia akan diteleportasi dari tepi. Ini karena paket "Saya berhenti menekan W" dikirim setelah server memproses informasi.
Berikut ini diagram lag untuk membantu Anda memahami apa yang saya maksud: http://i.imgur.com/Prr8K.png
Saya hanya bisa mengirim paket "W Pressed" setiap frame untuk diproses oleh server, tapi itu sepertinya solusi bandwidth-mahal.
Bantuan apa pun dihargai!
sumber
Saya mengerti pertanyaan Anda sebagai:
Server mendapat paket ketika saya mulai menekan tombol 'maju' dan paket lain ketika saya akhirnya merilis tombol 'maju'. Oleh karena itu, gerakan aktual di server dimulai dan berakhir sekitar 100 milidetik 'terlambat' dalam permainan aktual vs apa yang diekspresikan pemain di sisi klien. Jadi jika pemain ingin bergerak 10 detik, ia mungkin berakhir bergerak 10x detik sebagai gantinya
x >= 1
online.Ini adalah strategi desain yang buruk karena tidak mengekspresikan keinginan pemain di dunia game seperti yang diinginkan pemain, menciptakan pengalaman pengguna yang agak buruk.
Solusi yang saya sarankan adalah mengirim paket (sesering mungkin) yang menunjukkan berapa banyak langkah yang dilakukan pemain dan ke arah mana. Server kemudian memperbarui dunia game dengan lokasi pemain baru jika melewati pemeriksaan kebenaran. Jadi pemain dapat bergerak dengan presisi tinggi dan menghindari jatuh dari tepian tinggi.
Alternatifnya adalah dengan mengingat posisi pemain di detik terakhir dan memperbaiki posisi dalam retrospeksi saat tombol dilepaskan. Kedengarannya seperti itu akan menciptakan efek karet gelang di masa lalu (hanya untuk alasan yang berbeda)
Jadi pada dasarnya Anda perlu mengirim paket tombol mana yang ditekan dan berapa waktu permainan sebenarnya tombol itu ditekan dan kemudian, tombol mana yang dilepaskan dan pada waktu yang tepat.
sumber