Yah, Anda mendapat jawaban tetapi jawaban Anda yang sebenarnya adalah "coba sendiri". Hal-hal berbeda dari game ke game.
Saya melakukan beberapa permainan multiplayer untuk beberapa kursus desain game jaringan terdistribusi. Yang paling menantang adalah melakukan permainan aksi waktu nyata di mana banyak pemain terlibat dan mengirim masukan seperti neraka. Ketika sampai pada titik itu, semuanya menjadi masalah. Ketika Anda melihat tautan Tetrat pertama yang dikirim, bahkan menentukan kolusi menjadi masalah. Dan Anda akan membaca istilah-istilah seperti lag, interpolasi, ekstrapolasi, prediksi ... Tetapi jika Anda tidak pernah mencoba kode dari awal, Anda hanya akan menerima kata-kata ini dan tidak akan tahu apa artinya sebenarnya.
Rekomendasi saya adalah:
Langkah 1
Mulailah dengan desain berbasis server yang sepenuhnya disahkan untuk saat ini. Seperti yang Anda katakan, kirim saja input pengguna ke server dan biarkan server melakukan segalanya dan klien mendapatkan hasilnya. Game Anda akan bekerja sepenuhnya konsisten. Tetapi ketika Anda melihat klien Anda, Anda akan melihat beberapa kelambatan, beberapa masalah teleportasi, pergerakan tidak lancar ... dll.
Langkah 2
Mulai perbaiki masalah di sisi klien. Masalah teleportasi misalnya. Karakter Anda berada di (0,0) dan server mengatakan sekarang Anda berada di (100,100). Karakter Anda hanya akan teleport ke (100.100) yang tidak bagus. Ada interpolasi. Anda harus memiliki kode di sisi klien yang akan menggeser karakter dari (0,0) ke (100, 100) dengan mulus. Ya, Anda akan memindahkan karakter Anda dari (0,0) ke (100.100) tetapi seberapa cepat? Untuk saat ini Anda bisa menggunakan perbedaan waktu antara setiap pembaruan server. Jika server Anda mengirim 10 paket dalam satu detik yang berarti penundaan 100 ms antara setiap paket.
Langkah 3
Sekarang gim Anda sudah bagus untuk jaringan cepat di mana ada keterlambatan (1-50) ms. Tapi itu akan hancur jika ada paket yang hilang, latensi tinggi atau kalkulasi membutuhkan waktu lama di server ... dll. Dalam situasi itu Anda akan melihat ketika Anda menekan panah kiri, Anda akan melihat karakter Anda bergerak ke kiri dengan penundaan 200 ms. Penundaan antara paket Anda pergi ke server, waktu perhitungan dan kembali kepada Anda dengan posisi terakhir Anda. Ini buruk, kelemahan terburuk dari desain resmi server. Pemain ingin karakternya bergerak ke kiri begitu dia menekan ke kiri, Anda tidak bisa membuatnya menunggu. Untungnya klien juga memiliki kode yang sama dengan server, jadi mengapa tidak segera jalankan di klien dan perbaiki hasil akhir dengan jawaban dari server? Itulah dasar prediksi input. Klien menekan kiri, kode di sisinya akan memindahkannya ke kiri, setelah beberapa waktu katakanlah 200 ms, posisi sebenarnya berasal dari server dan klien memperbaiki posisinya dengan itu. Jika semuanya berjalan dengan baik, klien tidak akan melihat apa pun, "langkah 2" juga akan membantu kami dalam hal ini.
Nah, net memiliki banyak tutorial dan hal-hal tentang hal ini. Tapi ada 2 yang sangat saya sukai:
Sangat bagus, mencakup bintik-bintik gelap: Jaringan Multiplayer Engine-Source Engine
Jenis sejarah, menyenangkan untuk dibaca dan layak: 1500 Pemanah di 28,8 ,