Apa yang terlibat dalam pembuatan game platformer multi-waktu nyata?


13

Saya membuat game platformer yang memiliki fitur "kooperatif" yang ingin saya garap melalui jaringan / internet.

Sekarang saya telah membaca tentang pemrograman game jaringan termasuk artikel-artikel seperti Apa yang perlu diketahui oleh setiap programmer tentang jaringan game dan jadi saya memahami perbedaan antara teknik-teknik seperti kunci pintu Peer-to-Peer dan arsitektur prediksi Server-Client:

  • Saya telah menyimpulkan bahwa untuk game real-time apa pun yang akan dimainkan melalui internet, langkah sebaya Peer-to-Peer bukanlah pilihan.
  • Saya juga khawatir bahwa bahkan untuk platformer, arsitektur klien-server sederhana (tanpa semacam prediksi klien) akan menghasilkan gameplay yang menurun karena keterlambatan antara tindakan dan reaksi yang disebabkan oleh perjalanan pulang-pergi ke server. (Setelah mengatakan bahwa saya ingin menghilangkan kebutuhan untuk server pusat, dan hanya satu pemain, klien, yang benar-benar akan mengalami kelambatan ini).

Ini meninggalkan prediksi klien, tetapi bahkan untuk game sederhana seperti platformer ini masih terdengar cukup kompleks.

Bagaimana cara saya membuat sistem prediksi klien yang berfungsi untuk game platformer multi pemain?


1
Satu hal yang Anda tidak perlu khawatirkan dalam permainan kooperatif adalah menyontek;)
Jonathan Connell

Saya menandai ini sebagai tidak konstruktif. Pertanyaan-pertanyaan yang diajukan ("Berapa banyak pekerjaan untuk menulis permainan jaringan yang membuat prediksi klien? Apakah saya akan berakhir dengan setengah dari basis kode saya yang terdiri dari kode jaringan?") Terlalu luas dan tidak spesifik masalah sama sekali. Jawabannya pada dasarnya adalah "itu tergantung", yang bukan jawaban yang baik.
TravisG

-1, "Berapa banyak pekerjaan" yang subjektif.
Tetrad

1
Berapa banyak pekerjaan, tidak subyektif karena berdiri sendiri tetapi tergantung pada beberapa faktor (ukuran permainan, persyaratan akurasi, dll) faktor-faktor tersebut dapat mempengaruhi jika banyak pekerjaan, sedikit kerja, atau di suatu tempat di antara keduanya (meskipun apa jenis pekerjaan adalah pertanyaan yang lebih baik); Namun, saya pikir OP benar-benar bertanya berapa banyak upaya yang diperlukan dan seberapa besar bagian dari basis kode jenis kode ini. Seperti yang dikatakan, itu mungkin terlalu luas. Saya memilih interpretasi yang lebih sempit dan menjawabnya. Saya pikir OP harus berupaya sedikit untuk mempersempit pertanyaan menjadi beberapa poin yang sangat spesifik.
Nate

@Tetrad Maaf - Saya berusaha keras untuk membuat pertanyaan ini seobjektif mungkin, tapi pertanyaan saya adalah "apakah sulit untuk membuat sistem prediksi klien yang berfungsi untuk permainan tipe Y" - jika tidak maka saya akan belajar seperti saya. pergi, tetapi waktu saya terbatas sehingga belajar yang terlalu banyak bekerja setelah X hari bermain sudah terlambat. Saya akan mencoba dan memberikan rincian lebih lanjut tentang Y, tetapi saya tidak ingin membuat pertanyaan "terlokalisasi". Masalah utama di sini adalah gerakan, yang umum bagi semua platformer (saya ingin orang lain menganggap pertanyaan ini bermanfaat). Jika saya dapat memperbaiki pertanyaan ini maka saran sangat dihargai.
Justin

Jawaban:


5

Saya tidak berpikir bahwa setengah dari basis kode Anda akan berubah menjadi kode jaringan jika Anda memutuskan untuk mengimplementasikan fitur seperti ini.

Menurut pendapat saya, cara paling sederhana untuk melakukan ini, adalah menyiapkan server "sentral" (bahkan jika itu berarti bahwa satu pemain "host" permainan dan kemudian terhubung ke server sendiri) yang menerima semua input pengguna secepat mungkin , dan mengirimkannya kembali ke setiap klien.

Di klien, Anda menerapkan ini tidak berbeda dengan jika Anda melakukan permainan bersama untuk dua pemain secara lokal, kecuali Anda membaca P1 dari keyboard, dan P2 dari jaringan.

Anda harus meminta server mengirimkan status permainan penuh sesekali, dan kedua klien dapat snap ke status authoratitave baru dari server, atau mereka dapat meluncur ke status baru (lebih dari beberapa detik). Kecuali Anda memiliki kehilangan paket yang mengerikan atau banyak klien per server, pendekatan ini cukup untuk situasi yang Anda garis besarkan.


Yang semudah pendekatan Server Klien (kecuali satu klien host server -> Anda tidak perlu server khusus tetapi Anda harus pergi dengan garis sesuatu UDP + NAT Punchthrough yang membutuhkan server yang dianggap bagaimanapun). Kedua, Anda mengusulkan metode berbaris (karena Anda berbicara tentang pengiriman gamestate lengkap), ini bukan, IMHO, metode terbaik jika permainan berjalan melalui internet (mungkin melalui LAN) di mana client-server jauh lebih mudah untuk melaksanakan.
Valmond

1
Tidak, saya menyarankan Anda sesekali mengirim status permainan penuh, sehingga klien dapat memastikan bahwa itu tidak terlalu jauh.
Nate

2

Saya memiliki permainan gaya mMORPG yang sepenuhnya berfungsi dengan prediksi klien (permainan ini masih jauh dari selesai tetapi berjalan 'OK') dan saya memiliki sesuatu di sepanjang 40.000 baris kode untuk server dan dobel untuk klien (tambahkan jumlah yang sama untuk alat, dll. .). Prediksi ini mungkin tidak lebih dari beberapa ratus baris (bahkan jika itu) dan seluruh bagian jaringan beberapa ribu baris tetapi tidak lebih dari mengatakan 5.000 (tergantung sedikit di mana Anda menggambar garis).

Fuzzy question fuzzy answer ;-)


2

Proporsi yang signifikan dari kode jaringan dapat terlepas dari game yang Anda mainkan. Karena itu, dan karena Anda baru mengenal jaringan, hal pertama yang saya sarankan Anda lakukan adalah menemukan perpustakaan yang akan bekerja untuk Anda. RakNet misalnya.

Satu hal yang Anda inginkan dalam kode gim Anda adalah kemampuan untuk menangani beberapa kondisi gim yang berbeda, yang dapat Anda gunakan untuk interpolasi dan prediksi. Itu cukup sederhana untuk dirancang di muka, tetapi bisa menjadi pekerjaan yang signifikan jika Anda memodifikasi gim pemain tunggal yang ada.

Perhatikan juga bahwa jika Anda ingin membuat orang asing memainkan permainan peer to peer melalui internet, Anda mungkin memerlukan setidaknya satu server di suatu tempat yang menangani lobi / perjodohan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.