Saya telah bekerja pada kode jaringan untuk dua game jaringan AAA real time, satu untuk smartphone dan satu untuk konsol genggam.
Untuk langsung menjawab pertanyaan Anda "mengapa", well, beberapa gim menggunakan satu atau yang lain karena lebih cocok untuk mereka. Ini tergantung tidak hanya pada jenis permainan, tetapi juga pada jenis jaringan apa yang sedang kita bicarakan (kabinet arcade yang terhubung memiliki kondisi yang berbeda dibandingkan dengan game yang dimaksudkan untuk dimainkan melalui 3G) Beberapa game benar-benar menggunakan keduanya, atau bahkan sepenuhnya berbagai pendekatan untuk menyinkronkan data!
Saya ingin menggeneralisasi, dan mempertimbangkan tidak hanya data posisi, tetapi hampir semua jenis data yang dapat disinkronkan antara dua klien jaringan.
Alih-alih dua kemungkinan, saya ingin mengusulkan spektrum antara pembaruan sulit dan lunak.
Pembaruan sangat sulit adalah peristiwa terpisah yang segera mengubah keadaan pada klien lain, tanpa jenis interpolasi apa pun, baik karena data bersifat kritis (pemain meninggal), karena itu bukan tipe data yang menerapkan interpolasi (online) permainan catur, pesan obrolan, dll.), atau karena jaringan Anda memungkinkan Anda untuk melakukan itu (pikirkan kabinet arcade yang terhubung di mana andal mengirim seluruh kondisi permainan 60 kali per detik berada dalam jangkauan kemungkinan).
Dengan metode ini, penundaan jaringan akan selalu muncul sebagai pembaruan yang tertunda dan bermanifestasi sebagai karakter yang melompat-lompat.
Sulit dengan pembaruan antar / ekstrapolasi mirip dengan pembaruan yang sangat sulit, tetapi untuk data yang terus berubah, yang secara praktis tidak mungkin mengirim data setiap kali ada perubahan. Pikirkan mengirim posisi dan vektor kecepatan; Anda harus dapat menginterpolasi data antara dua titik, dan memperkirakannya setelahnya. Anda harus memiliki rencana kontingensi jika data yang masuk tidak setuju dengan ekstrapolasi Anda. Saya akan mengatakan sebagian besar game yang membutuhkan pembaruan posisi menggunakan metode ini.
Sulit dengan pembaruan sinkronisasi mirip dengan keras dengan inter / ekstrapolasi, tetapi jarang memerlukan sinkronisasi. Anda harus menggunakan ini untuk data yang benar-benar sepele untuk inter / ekstrapolasi, seperti jam dalam permainan pertempuran (sekali diatur di kedua sisi, tidak benar-benar perlu untuk melakukan sinkronisasi lagi setelah itu)
Pembaruan sulit yang tertunda mirip dengan pembaruan yang sulit, tetapi yang Anda lihat adalah data di masa lalu. Saya menduga bahwa di banyak game arcade musik di Jepang di mana Anda dapat memutar lagu melawan orang lain, Anda sebenarnya bermain melawan data pemain yang direkam di masa lalu, mungkin beberapa jam atau bahkan beberapa hari sebelumnya. Tentu saja, jenis pembaruan ini hanya dapat digunakan ketika Anda tidak benar-benar berinteraksi dengan pemain lain.
Pembaruan lunak terdiri dari pengiriman data perencanaan, dan menjalankan rencana pada semua host. Inilah yang Anda sebut "merintis jalan". Jumlah data yang diperlukan untuk menyinkronkan data seperti ini jauh lebih rendah; Anda dapat menggunakan jenis pembaruan ini ketika Anda bisa lolos dengan perbedaan tertentu dalam cara data disajikan kepada pengguna, seperti saat menyinkronkan ratusan musuh.
Merencanakan pembaruan data sendiri juga bisa sekeras yang Anda inginkan, tentu saja.
Pembaruan sangat lunak digunakan ketika hasil suatu tindakan dapat dihitung dengan andal jauh sebelum itu terjadi. Anda hanya mengirim hasilnya, dan klien lain hanya memainkannya kembali. Sebagai contoh, beberapa game browser dan smartphone memungkinkan Anda bertarung dengan orang lain, tetapi pertempuran sebenarnya membutuhkan waktu berjam-jam untuk diselesaikan (pikirkan game yang mirip Travian). Sangat mungkin bahwa game-game ini menghitung hasil pada saat pertempuran dimulai, dan Anda hanya melihat hasil pertempuran itu.
Contoh non-jaringan lain dari ini adalah Peradaban 4 dengan animasi pertempuran diaktifkan. Ketika Anda menyerang seseorang, hasil pertempuran segera dihitung, tetapi Anda bisa melihat animasi yang diputar ulang. Saya dapat meyakinkan Anda bahwa pertempuran tidak dihitung karena sedang dianimasikan.
Seperti yang Anda lihat, ada banyak cara untuk menyinkronkan data, dan saya yakin Anda bisa membayangkan banyak hal lain. Semua kecuali permainan online yang paling sederhana kemungkinan besar akan menggunakan campuran metode ini, tergantung pada jenis data yang disinkronkan, jenis permainan, dan bahkan keadaan jaringan (menggunakan pembaruan yang sulit ketika jeda rendah, dan pergi untuk pembaruan yang lebih lunak ketika jeda semakin tinggi).