Gerçek zamanlı çok oyunculu platform oyunu yaratmada neler var?


13

Ben ağlar / internet üzerinden çalışmak istiyorum "kooperatif" özelliği olan bir platform oyunu yaratıyorum.

Şimdi, her programcının oyun ağı hakkında bilmesi gerekenler gibi makaleler de dahil olmak üzere ağ oyunu programlamasını okudum ve bu yüzden Peer-to-Peer lockstep ve Server-Client tahmin mimarileri arasındaki teknikler arasındaki farkı anlıyorum:

  • İnternet üzerinden oynanacak herhangi bir gerçek zamanlı oyun için Peer-to-Peer kilit adımının sadece bir seçenek olmadığı sonucuna vardım.
  • Ayrıca, bir platformcu için bile (bir tür istemci tahmini olmadan) basit bir istemci-sunucu mimarisinin, bir sunucuya gidiş dönüşün neden olduğu eylem ve reaksiyon arasındaki gecikme nedeniyle bozulmuş oyunla sonuçlanmasından endişe duyuyorum. (Merkezi bir sunucu ihtiyacını ortadan kaldırmak istediğimi söyledikten sonra, sadece oyunculardan biri, müşteri bu gecikmeyi yaşayacak).

Bu, müşteri tahmini bırakır, ancak bir platform gibi basit bir oyun için bile, bu hala oldukça karmaşık görünüyor.

Çok oyunculu bir platform oyunu için çalışan bir müşteri tahmin sistemi oluşturmayı nasıl deneyebilirim?


1
İşbirlikçi bir oyunda endişelenmeniz gereken çok az şey var;)
Jonathan Connell

Bunu yapıcı değil olarak işaretledim. Sorulan sorular ("İstemci tahminini kullanan ağa bağlı bir oyun yazmak için ne kadar iş var? Ağ kodundan oluşan kod tabanımın yarısıyla sonuçlanacak mıyım?") Çok geniş ve probleme özgü değil. Cevap temelde "buna bağlıdır", ki bu iyi bir cevap değildir.
TravisG

-1, "Ne kadar iş" özneldir.
Tetrad

1
Ne kadar çalışma, tek başına durduğu için öznel değildir, ancak birkaç faktöre (oyunun boyutu, doğruluk gereksinimleri, vb.) Bağlıdır, bu faktörler çok fazla çalışma, biraz çalışma veya aradaki bir yerde (ancak ne tür bir çalışma daha iyi bir soru); Ancak, ben OP gerçekten ne kadar çaba gerektiğini ve kod-tabanının bu tür bir kod ne kadar büyük bir parçası olacağını soruyor düşünüyorum. İfade edildiği gibi, çok geniş olabilir. Daha dar bir yorum seçtim ve cevapladım. OP'nin soruları birkaç spesifik noktaya daraltmak için biraz daha çaba göstermesi gerektiğini düşünüyorum.
Nate

@Tetrad Üzgünüm - Bu soruyu olabildiğince objektif yapmak için çok uğraştım, ancak sorum "Y tipi bir oyun için çalışan bir müşteri tahmin sistemi oluşturmak zor mu?" ama zamanım sınırlı, bu yüzden X gün oynadıktan sonra çok fazla iş olduğunu öğrenmek çok geç. Y ile ilgili daha fazla ayrıntı sağlamaya çalışırdım, ancak soruyu "çok yerel" yapmak istemiyorum. Burada asıl sorun, tüm platformcular için ortak olan harekettir (başkalarının bu soruyu yararlı bulmasını istiyorum). Bu soruyu geliştirebilirsem, öneriler takdir edilir.
Justin

Yanıtlar:


5

Böyle bir özellik uygulamaya karar verirseniz, kod tabanınızın yarısının ağ koduna dönüşeceğini düşünmüyorum.

Bence bunu yapmanın en basit yolu, tüm kullanıcı girişlerini olabildiğince hızlı kabul eden bir "merkezi" sunucu kurmaktır (bu, bir oyuncunun oyunu "barındırdığı" ve sonra kendi sunucusuna bağlandığı anlamına gelse bile) ve her istemciye geri gönderir.

İstemcide, bunu klavyeden P1 ve ağdan P2 okumak dışında, yerel olarak iki oyuncu için bir kooperatif oyunu yapmaktan farklı değilsiniz.

Sunucunun arada bir tam oyun durumu göndermesi gerekir ve her iki istemci de sunucudan yeni yetkili duruma geçebilir veya yeni duruma kayabilir (birkaç saniye içinde). Sunucu başına korkunç paket kaybınız veya tonlarca müşteriniz yoksa, bu yaklaşım özetlediğiniz durum için yeterli olmalıdır.


Bu, İstemci Sunucusu yaklaşımı kadar kolaydır (bir istemci sunucuyu barındırır -> özel bir sunucuya ihtiyacınız yoktur, ancak yine de özel bir sunucuya ihtiyaç duyan bir hat UDP + NAT Punchthrough'a gitmeniz gerekir). İkincisi, lockstep yöntemini öneriyorsunuz (tam oyun siteleri göndermeden bahsediyorsunuz), bu, oyun sunucusunun çok daha kolay olduğu internet üzerinden çalışıyorsa (muhtemelen LAN üzerinden olsa da) en iyi yöntem IMHO değildir. uygulamaya.
Valmond

1
Hayır, zaman zaman tam oyun durumları göndermenizi öneririm, böylece müşteri çok uzakta olmadığından emin olabilir.
Nate

2

İstemci tahmini ile tamamen işlevsel bir mMORPG tarzı oyun var (oyun bitmiş olmaktan çok ama 'Tamam' çalışıyor) ve sunucu için 40.000 satır boyunca bir şey var ve istemci için çift (araçlar vb için aynı miktarda ekleyin) .). Tahmin muhtemelen birkaç yüz satırdan fazla değildir (hatta) ve tüm ağ birkaç bin satırdan oluşur, ancak 5.000'den fazla değildir (çizgiyi çizdiğiniz yere biraz bağlıdır).

Bulanık soru bulanık cevap ;-)


2

Ağ kodunun önemli bir kısmı oynadığınız oyundan bağımsız olabilir. Bu nedenle ve ağ oluşturma konusunda yeni olduğunuz için, size önereceğim ilk şey, bu işi sizin için yapacak kütüphaneler bulmaktır. Örneğin RakNet.

Oyun kodunuzda isteyeceğiniz bir şey, enterpolasyon ve tahmin için kullanabileceğiniz birden fazla farklı oyun durumunu işleme yeteneğidir. Ön tarafta tasarlamak oldukça basit, ancak mevcut bir tek oyunculu oyunu değiştiriyorsanız önemli miktarda çalışma olabilir.

Ayrıca, yabancıların internet üzerinden bir oyun oynamak için yabancılara sahip olmak istiyorsanız, muhtemelen lobi / çöpçatanlığı işleyen bir yerde en az bir sunucuya ihtiyacınız olacaktır.

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.