Saat ini saya sedang dalam tahap awal menulis sebuah game yang pada akhirnya saya ingin tingkatkan di sebagian besar aspek.
Bagaimana saya bisa berhenti menulis kode jaringan namun membiarkannya cukup mudah diimplementasikan, yaitu, tidak harus menulis ulang seluruh permainan hanya untuk menambahkannya.
Apa yang harus saya ingat?
Saya memiliki pola komponen di mana saya memisahkan fisika / deteksi tabrakan, logika permainan, tipe data dan animasi / rendering satu sama lain.
Bagaimana cara saya menulis klien dan server yang belum memiliki kode jaringan yang dapat diimplementasikan secara lokal?
Apa yang harus saya lakukan di klien dan apa yang harus saya lakukan di server? Haruskah saya semacam berpura-pura memiliki kode jaringan selesai dan mengirim pesan antara server dan klien dan akun untuk keterlambatan dll meskipun tidak akan ada?
Sunting: Ini direncanakan menjadi RPG top-down. Multiplayer sederhana tempat Anda meng-host server untuk teman-teman Anda adalah apa yang saya pikirkan, jadi curang tidak terlalu menjadi masalah (siapa yang ingin bermain dengan teman yang curang?). Masih saya ingin pergi dengan "Server selalu benar" pendekatan.
Sunting 2: Saya kira saya sedang mencari beberapa petunjuk tentang seperti apa pola pikir saya. Bagaimana saya harus menangani input keyboard, animasi, dll, daripada hanya menerapkan setiap efek / perubahan secara instan. Hmmm, saya mungkin perlu membaca dengan benar di jaringan sebelum pergi ke mana pun, yang adalah apa yang saya harapkan dari membuat kerangka jaringan yang bisa bekerja secara lokal.
Jawaban:
Tanpa mengetahui lebih banyak tentang permainan yang Anda tulis, dan bagaimana Anda menulisnya, sangat sulit untuk mengatakan solusi generik untuk masalah Anda.
Namun, Anda mungkin ingin mempertimbangkan keputusan yang Anda ambil ini meninggalkan kode jaringan sampai akhir, tergantung pada seberapa penting jaringan untuk permainan Anda.
Yang saya maksudkan adalah, jika Anda menulis game jaringan yang berat, seperti MMORPG, mungkin tidak bijaksana untuk meninggalkan jaringan sampai akhir.
Yang dipertimbangkan, jika dampak yang Anda harapkan dari kode jaringan rendah (seperti pada, tidak memiliki kode jaringan sama sekali bukan game-breaker), maka bisa tepat untuk membiarkannya untuk tahap kemudian (tapi tidak terlalu terlambat).
Ingatlah bahwa -writing- kode jaringan tidak sama dengan -berpikir- tentangnya. Ketika Anda membuat keputusan tentang bagaimana permainan Anda dibuat, Anda harus mempertimbangkan bagaimana ini akan mempengaruhi keputusan jaringan, dan jika dampak yang diharapkan tinggi, mungkin mengimplementasikannya sebagai rintisan yang memberikan beberapa informasi umum, dan kemudian ketika saatnya menulis jaringan. kode, itu hanya masalah memasukkannya di tempat Anda meninggalkan rintisan.
Jadi, misalnya, jika Anda membuat game catur online, Anda mungkin memiliki fungsi yang disebut
ExecuteMove()
yang disebut dalam beberapa cara ketika suatu langkah dimasukkan dengan mouse, dan dengan cara lain ketika suatu gerakan dimasukkan dengan keyboard. Pada titik ini, Anda mungkin ingin berpikir tentang membuat rintisan jaringan yang, setelah mendapatkan data yang diperlukan dari host lain (inilah yang Anda tulis di bagian selanjutnya), meneleponExecuteMove()
.Dengan begitu, saat Anda membuat game, Anda akan tahu bagian mana yang dipengaruhi oleh kode jaringan, dan ketika tiba saatnya untuk benar-benar menulis kode jaringan, Anda beberapa langkah di depan.
Jika ini adalah pertama kalinya Anda menulis game berjaringan, pertimbangkan untuk tidak terlalu memikirkan anti kecurangan dan hal-hal seperti itu. Membuat game berjejaring cukup rumit untuk mengharuskan seluruh tim yang terdiri dari orang-orang yang sangat berpengalaman untuk melakukannya untuk game AAA, jadi lambatkan, dan pertama buat gim yang berfungsi, sebelum fokus pada topik yang lebih kompleks.
Akhirnya, jika ini adalah pertama kalinya Anda membuat game, jangan membuatnya terhubung jaringan, silakan. Membuat game sangat kompleks, sehingga setiap persyaratan yang Anda tambahkan ke game Anda akan membuatnya lebih kompleks secara eksponensial.
sumber
Saya berada dalam situasi yang sama, tetapi saya mencoba melakukan simulasi jaringan lebih dari permainan; tapi saya pikir pendekatan saya dapat membantu proses desain Anda.
Pendekatan saya sesuai dengan komentar Anda tentang IPC (komunikasi antar-proses).
Pertama, sebagai latar belakang saya mempelajari buku "Networked Graphics" oleh Steed dan Oliveira. Ini memberikan latar belakang yang baik pada berbagai arsitektur jaringan untuk permainan tergantung pada berbagai kriteria dan jenis permainan. Ini menyediakan alat untuk membantu Anda memutuskan arsitektur gim Anda dan apa yang ingin Anda pasang di jaringan, dan apa yang ingin Anda wujudkan secara lokal.
Kedua, pisahkan komponen jaringan menjadi utas latar belakang yang terpisah sehingga pengembangan game awal Anda dapat memiliki komponen yang dikodekan secara lokal, tetapi Anda terpaksa harus berurusan dengan pemisahan utas. Jangan menggabungkannya dengan fitur lain yang nantinya akan menjadi "latar belakang lokal" tetapi memaksanya menjadi utas latar yang "berpotensi jauh".
Ini akan membantu menjaga logika Anda tetap terpisah dan juga memungkinkan Anda untuk mensimulasikan faktor-faktor keterlambatan jaringan ke dalam proses sehingga Anda juga dapat melihat dampak latensi.
sumber
Jika Anda mempelajari semua hal ini, mengapa tidak menulis Versi 1 pemain tunggal sederhana, dan begitu itu bekerja, dengan pengetahuan Anda yang lebih dalam, pikirkan kembali semuanya secara mendalam untuk Versi 2 yang akan multi-pemain?
sumber
Menerapkan kelas "jaringan palsu" yang meneruskan pesan di antara utas, yang memiliki antarmuka yang sama dengan kelas jaringan. Kemudian Anda dapat menguraikan jaringan palsu untuk memiliki penundaan acak dan kehilangan paket. Akan selalu lebih mudah untuk men-debug kode jaringan dengan kelas palsu daripada dengan jaringan nyata.
sumber