Glenn dalam artikel dan komentarnya memberikan alasan yang sangat kuat untuk menggunakan UDP melalui TCP, tetapi SC2 jelas menggunakan TCP.
Glenn sebagian besar berbicara tentang permainan berbasis fisika, yaitu. penembak orang pertama dan game mengemudi. Ini memiliki persyaratan yang berbeda untuk permainan strategi waktu nyata di mana posisi unit yang tepat pada setiap langkah logika adalah penting. Jadi strategi komunikasi tentu berbeda.
"Waktu nyata" berarti berbagai hal dalam konteks yang berbeda. Game tidak real time 'sulit' karena jika pesan terlambat, semuanya rusak. (Setidaknya, tidak ada alasan bagus untuk permainan yang begitu menuntut, karena sistem hanya perangkat lunak harus dapat pulih dari keterlambatan pemrosesan, tidak seperti pembangkit tenaga nuklir atau peralatan medis misalnya.) Game benar-benar waktu nyata 'lunak' atau 'tegas'. ( Definisi di Wikipedia seperti biasa .) Jenis permainan membuat perbedaan seberapa cepat Anda memerlukan informasi, apakah Anda dapat kehilangan informasi dan lolos begitu saja, dll. Cukup untuk mengatakan bahwa TCP cukup baik untuk banyak permainan, tetapi untuk gim lain, lebih disukai UDP.
Saya menduga bahwa pendekatannya adalah mengirim keadaan permainan penuh setiap unit pada setiap frame.
Dia akan mengirim informasi yang cukup untuk merekonstruksi keadaan game yang relevan dari setiap unit yang telah berubah.
- Anda tidak perlu mengirim informasi apa pun tentang sesuatu yang belum berubah.
- Anda tidak perlu mengirim status penuh jika Anda dapat mengirim informasi yang cukup bagi penerima untuk membangun negara baru dari negara lama. (mis. Kirimkan saja nilai delta relatif ke kondisi lama. Atau kirim saja bagian kondisi yang telah berubah dan bukan sisanya.)
- Jika dua game menjalankan algoritma yang persis sama dan memiliki data yang persis sama maka Anda bisa mengirim input dan penerima akan menirukan efek secara lokal untuk mendapatkan status baru.
Sebagian besar game tidak memenuhi kriteria 3, jadi mereka menggunakan 1 dan 2 sebagai gantinya. Namun banyak game RTS dapat, dan memang, memanfaatkan 3.
Juga, tidak harus harus "setiap frame". Konsep bingkai juga samar-samar. Apakah ini bingkai rendering? Apakah ini kumpulan logika? Apakah ini bingkai data jaringan yang dikirim? Apakah ketiganya selalu menyelaraskan satu-ke-satu atau apakah Anda mendapatkan tingkat grafik variabel dengan tingkat logika tetap? Beberapa gim, terutama gim strategi waktu nyata seperti Starcraft 2, atau gim dengan kemampuan memutar ulang (saat Anda menyentuhnya) ingin menjaga segala sesuatunya dalam keadaan sempurna dengan memiliki pembaruan jaringan biasa (yang mungkin atau mungkin tidak cocok dengan 'bingkai' dalam pengertian lain) tetapi ini bukan persyaratan untuk semua game. Banyak game hanya mengirimkan pembaruan secara semi-reguler, tergantung pada seberapa jauh mereka bersedia membiarkan klien berjalan.
Input pemain adalah penting, dan urutan input bahkan lebih penting. Saya tidak berpikir itu layak untuk SC2 mengirim keadaan permainan 200 unit dan lebih banyak pada 30 - 60 FPS.
Banyak game tidak akan memperlakukan frame rendering sebagai bingkai logis. Mereka mungkin memiliki 60FPS dalam grafik tetapi hanya memiliki 10 pembaruan logika per detik, dan mengirim 1 pembaruan jaringan untuk masing-masing. Tetapi bahkan 30 pembaruan jaringan per detik adalah wajar jika Anda menggunakan metode 'kirim masukan', tentu saja.
Saya telah berusaha mengidentifikasi 2 jenis data yang mungkin. Apa teknik lainnya? Akan baik untuk Qoute game jika Anda mau.
Tidak terlalu banyak ada teknik yang berbeda, tetapi beberapa kendala berbeda pada sistem, dan pentingnya setiap kendala akan bervariasi dari satu game ke game lainnya. Jadi, Anda hanya perlu memilih sistem yang cocok untuk Anda.
- Beberapa unit, bergerak cepat dan tidak menentu melalui input pengguna, latensi sensitif, sinkronisasi tepat di seluruh sistem tidak penting - posisi siaran melalui protokol yang tidak dapat diandalkan (mis. UDP) untuk mendapatkan kecepatan maksimum, dan pesan yang terlewat tidak akan menjadi masalah karena yang baru akan segera datang. Simulasi fisika secara lokal untuk meningkatkan kualitas rendering tetapi perbaiki posisi ketika informasi baru tiba. Baik untuk penembak dan game mengemudi.
- Banyak unit, tetapi sebagian besar tidak relevan, dan mereka bergerak lambat - hanya mengirim pembaruan untuk unit di dekat penerima, mengirimnya sebagai perubahan daripada keadaan penuh, mengirimnya relatif jarang, dan mengirim melalui protokol yang dapat diandalkan (mis. TCP) untuk menghindari khawatir tentang cara menangani pembaruan yang terlewat. Bagus untuk MMO.
- Banyak unit, yang digerakkan oleh AI berdasarkan input pengguna sebelumnya, sinkronisasi yang tepat di seluruh sistem sangat penting - mengirim input pengguna yang dicap waktu melalui protokol yang andal dan mengatur ulang secara lokal agar algoritma permainan tetap tersinkronisasi. Baik untuk RTSes dan game berbasis giliran.