Çok Oyunculu Uygulama, İstersem daha sonra uygulayabilir miyim?


15

Bir oyun projesi oluşturmak için XNA kullanmayı planlıyorum. Şu anda çok oyunculu bir işlevsellik eklemek isteyip istemediğimden emin değilim, hala yeni olduğumu çözmek için birçok sorunum var. Projenin zorunlu olarak kontrolden çıkmasını istemiyorum.

Sorum şu: Eğer çok oyunculu destek ekleme planı olmadan projeme yönelirsem, geri gitmek (genellikle değil) ve çok oyunculu bir oyunu yakalamak için gerekli kodu eklemek kolay mıdır?

Yanıtlar:


24

İşte Zoidcom ağ kitaplığı kılavuzundan alınan sağlam öneriler :

Projeniz planlama aşamasındaysa, projeyi en baştan ağ için tasarlamanız önerilir. Projenin geç bir durumunda ağ kodunun cıvatalanması büyük olasılıkla büyük bir yeniden düzenlemeye veya büyük miktarda saldırıya yol açacak ve bu da bakım gerektirmeyen ve hataya neden olan kodlara yol açacaktır.

En temiz yol, tüm oyunu saf bir ağ oyunuymuş gibi uygulamaktır. Yani, özel bir sunucu için kod uygulayın ve bu kodu yalnızca sunucu kodu olduğu için uygulayın. Oyun istemcisi kodunu benzer şekilde uygulayın. Sunucu ve istemci aynı süreçte çalışabilir ve gerçek bir ağ soketi kullanmasına gerek yoktur, ancak ayrı varlıklar olmalı ve tüm kodlar bu şekilde çalışacak şekilde tasarlanmalıdır. Oynatıcı atladığında, oyuncunun atlama vektörünü doğrudan değiştirmeyin, ancak sunucuya 'atlama tuşuna basılan' bir paket gönderin ve sunucunun bunu halletmesine izin verin.

Bu, tek oyunculu bir oyunda bile arka planda çalışan görünmez bir sunucu olduğu anlamına gelir. Aynı oyunun çok oyunculu bir versiyonunun yerel bir et voila yerine uzak bir sunucuya bağlanması gerekir, çok oyunculu yapılır. Bunun avantajları:

tek ve çok oyunculu için ayrı kod yok ağ kodu tüm proje temiz kodu boyunca test edilir ve geliştirilir

Bu şemayı kullanan projeler neredeyse tüm Quake motorları, Civilization 4, Neverwinter Nights ve daha birçoğunu kullanan oyunlardır.

İstemci ve sunucuyu sıfır gecikme ile aynı işlemde bağlamak için yerel soketler kullanılabilir. Bunlar Zoidcom tarafından sağlanır ve işletim sistemi düzeyindeki bir soketten geçmeden paketleri doğrudan bir ZCom_Control'den diğerine geçirir.


Bu, nefret ettiğim saf sunucu yetkisi için bir kurulum gibi görünüyor. Sunucuya pinginiz düşükse iyi oynar. Ancak ping çok yükseldiğinde, ekranınızdaki eylemler gecikir. Kaynak motorun kullandığı yöntemi, müşterinin fiziği ve işleri yerel olarak çalıştırdığını ve herhangi bir eylemin hemen göründüğünü, ancak sunucu hala insanların hacklenmediğinden ve ne olması gerektiğinde herhangi bir tutarsızlık olup olmadığını kontrol etmek için kontrol eder. , sunucu oynatıcıya doğru durumu gönderir ve istemcilerin simülasyonunu yeni verilerle geçersiz kılar.
AttackingHobo

8
@AttackingHobo: Sadece müşteri tahminini açıklıyorsunuz. İstemci tahminini ve sunucu yetkisini birlikte iyi bir şekilde kullanabilirsiniz ve Zoidcom kılavuzunda açıklanan mimariyi hiç engellemez.

@AttackingHobo @Joe: Ve Zoidcom aslında müşteri tarafı tahminini destekliyor ^^
Leftium

2

Leftium'un cevabında alıntılanan tavsiyeye katılıyorum; daha sonra ekleyemeyeceğiniz için ağdan itibaren tasarlayın .

İlk defa çok oyunculu bir oyun yapmaya çalıştığımda (tek oyunculu bir oyun yapmaya bile çalışmıyordum!), Önce oyunu çalıştıracağım ve daha sonra ağ ekleyeceğimi düşündüm. Kötü bir fikir. Gerçekten sıkıcı bir tek oyunculu oyunun prototipiyle bırakıldım ve bunu çok oyunculu bir oyuna nasıl dönüştüreceğime dair hiçbir fikrim yoktu. Tamamen hurdaya attım ve baştan başladım, bu sefer çok oyunculu ağ kodunu en baştan yazıyorum. Her şey tıklandı.

Tek oyunculu bir oyunla başlamak ve çok oyunculu işlevler eklemek imkansız değildir . Eğer düşünürseniz, doğru bir şekilde planlayın ve stratejinizi bildiğinizden emin olun, bir deneyin. En azından üzerinde çalışmanın ilginç bir bulmaca olacağını düşünüyorum. Ancak, nasıl ağ ekleyeceğinize ilişkin planınızı bildiğinizden emin olun.

(Ben hiç denemedim rağmen) bir orta zemin olduğunu düşünüyorum. Ağ oluşturma / çok oyunculu özellikler için bazı kukla sınıflar yazabilir ve tek oyunculu oyunu yazarken bunları kullanmaya özen gösterebilirsiniz. Daha sonra, çok oyunculu uygulamaya karar verirseniz, kukla sınıfları doldurmanız yeterlidir. Bu, sunucu / istemci yöntemine çok yaklaşır, ancak daha az işten kurtulabilirsiniz; Sonuçta, tek oyunculu bir oyun yapmak çok oyunculu bir oyundan daha kolaydır, bu yüzden tek oyunculu oyununuzu çok oyunculu bir oyun gibi yazacaksanız, neden sadece çok oyunculu yapmıyorsunuz?

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.