Sementara server memiliki keputusan akhir tentang posisi tersebut, ia harus melakukan itu dengan memverifikasi dan memeriksa kewarasan apa yang dikirim oleh klien sebagai input dan posisi. Saya mengatakan ini karena apa yang Anda lakukan adalah memindahkan pemain dengan segera dan harapan yang tercipta dalam kode Anda adalah bahwa klien adalah posisi sebenarnya.
Anda pikir itu umumnya bekerja dengan baik, tetapi ternyata tidak. Catatan: Anda mengatakan bahwa klien Anda tidak lebih dari seorang pemberi render, lalu segera memberikannya kontrol lokal untuk bergerak tanpa pesan server. Anda tidak dapat memiliki keduanya, baik menunggu server untuk memberitahu Anda untuk memindahkan atau mengambil kendali atas posisi Anda dan menggunakan server untuk memverifikasi menipu.
Saya perhatikan bahwa tanggapan Anda mencapai satu detik penuh? Itu 500 ms latensi yang sangat besar untuk semua jenis game aksi. Cobalah untuk mencari tahu mengapa perputaran ini memakan waktu begitu lama, bisa jadi apa saja dari antrian perintah yang dicadangkan dari tidak segera ditangani ke bandwidth yang dibanjiri atau bahkan setan yang menyebabkan banyak paket hilang.
Yang saya pikir harus terjadi adalah itu
client sends a move + position update
server gets it t+latency time later
server verifies and sends out info to all clients
client receives this at (t+latency + latency)
Bagian yang sulit di sini adalah bahwa jika klien menerima pesan tentang dirinya sendiri, sebagian besar harus mengabaikannya kecuali jika pesan itu seperti "langkah tidak valid, pergi ke XYZ sebagai gantinya." Jika pesan itu untuk klien orang lain yang Anda dapatkan info tentangnya maka Anda harus memperkirakan waktu yang tepat sehingga terlihat seperti di mana itu akan berada.