Çok oyunculu gerçek zamanlı Android oyunu için en iyi çözüm [kapalı]


11

Android (2-8 oyuncu) için çok oyunculu gerçek zamanlı oyun yapmayı planlıyorum ve çok oyunculu organizasyon için en iyi çözümün hangisi olduğunu düşünüyorum:

  1. PC'de sunucu ve mobilde istemci yapın, tüm iletişim sunucudan geçer (ClientA -> PC SERVER -> Tüm İstemciler)

  2. Bluetooth kullanın, henüz kullanmadım ve bilmiyorum bluetooth üzerinde çok oyunculu yapmak zor

  3. Bir cihazda sunucu oluşturun ve diğer cihazlar bağlanın (ağ üzerinden, ancak NAT üzerinden cihazlarla ilgili sorunu çözmek zor mu bilmiyorum?)

  4. Başka çözüm?


3
Bunun sadece yerel bir oyun olmayı mı planlıyorsunuz yoksa insanların internetteki insanlarla oynayabilmelerini mi istiyorsunuz? Oyunlar için makine barındırıyor musunuz?
Tetrad

Küçük ölçekli çok oyunculu oyunu seçiyorum, insanların odada buluştuğu yerde oyun yapmayı planlıyorum ve aynı oyunu oynayabiliyorum (bu tezimin konusu: mobil platformda çok oyunculu). Ama eğer birisi internette oynamak için ilginç bir çözüm varsa, ben de ilgileniyorum.
piotrek

Yanıtlar:


2

Yasal Uyarı; Java ve android platformu ile pek bir şey yapmadım .

Ancak, Windows mobil platformlarındaki '.net' dillerinde ve Windows platformunda daha kapsamlı deneyimim, bir Bluetooth veya ağ veri bağlantısı oluşturmak ve sürdürmek için gereken tüm kodların% 75-90'ının korunması / donanıma erişmek için gereken işletim sistemi veya kitaplıklar ile desteklenir.

Şimdiye kadar bu, Android için de geçerli, işletim sistemi Bluetooth veya internet üzerinden veri bağlantıları oluşturmak için yöntemler sunmanın yanı sıra ilgili donanımı etkinleştirmek / devre dışı bırakmak.

Bluetooth'un tercih edilen bağlantı yöntemi olacağını hayal edecektim, çünkü bu en düşük maliyetli (sunucu yok) olacaktır. Ve daha yerel bir toplantı / oyuna izin verin. Bluetooth kullanımı oldukça kolaydır. hangi cihaza bağlanmak istediğinizi öğrendikten sonra normal ağ soketlerine benzer şekilde çalışır.

Diğerleri, Bluetooth v2.0 / v2.1'in şu anda büyük veri yüklerini destekleyememesi nedeniyle doğrudur. Bu, v3.0 ve daha sonraki sürümlerin yayılmasıyla değişecektir. ve bu sınırlamanın üstesinden gelmenin yolları vardır.

Şimdilik basit bir kavram olsa da denemek isteyebileceğiniz karmaşık bir çözüm var. Bir süredir kullanıyorum, eşler arası benzer, ancak oyunun aynı anda tüm cihazlarda barındırılmasını içerir. Bu şekilde bir bağlantı geçici olarak kaybolur, yavaşlar veya herhangi bir nedenle bir oyuncu bağlantısı kesilirse, diğer oyuncular etkilenmez. Bu, düşürülen kullanıcıların devam eden oyuna diğer oyunculara veya kendi oyunlarına çok az veya hiç kesinti olmadan yeniden katılmalarını sağlar.

CON: Her oyuncu aslında oyunun kendi benzersiz örneğini oynayacaktır, bu da oyunların birbirleriyle senkronize olmaktan çok uzaklaşmasını önlemek için diğer oyuncularla bağlantılıdır.

CON: destekleyici kod olabilir ulaşmak istediğiniz şeye bağlı olarak başınızın etrafında sarmak için / kapsamlı, karmaşık ve zor.

PRO: Merkezi sunucu veya cihaz gerekmez! $$$ bakım gerektirmez.

PRO: Ağır bir veri alışverişi sadece bir oyuncuya (yeniden) katıldığında veya bir oyun başlatıldığında gerçekleşir. - Bu bile tüm oyunların üretilmesini sağlayarak azaltılabilir ve tüm oyuncular tarafından aynı şekilde ilerleyebilir. Ağır ağ kullanımı nedeniyle oluşan enerji tüketimini POTANSİYEL olarak azaltın .

PRO: Cihazlar bir oyunu diğer oyuncular olmadan devam ettirmek için ihtiyaç duydukları tüm verilere zaten sahip olacağından veriler daha az zaman duyarlı hale gelir. İzin Eğer bireysel kullanıcılar için gerçek oyun deneyimi yerine oyuncular bir grup daha fazla odaklanmak için.

Bunu kullanan tam kapsamlı bir oyun motoru uygulamak için zamanım yoktu. Yaptığım oyunlar, Monopoly ve Uno gibi oyunların yeniden oluşturulmasıyla sınırlıydı ve bu son derece iyi çalışıyor gibi görünüyor.

En kolayı Uno'yu taklit eden oydu. Bir oyuncunun tüm oyunları kazanmasını sağlamak için kazandıktan sonra kaybedenlerin destelerini istifledim. % 95'inden fazlasıyla herkesle aynı oyunu oynadığımı söyleyemedim.

Master of Orion II'ye benzer bir oyun geliştirmeye başladım, ancak oyunun kendisi benim başıma üstlenmem için biraz fazlaydı.


9

Bu büyük ölçüde oyuna bağlı, ancak bazı arkadaşlar ve ben aynı sorunları sadece birkaç ay önce düşünüyorduk ve işte belirlediğimiz şey bu. Yine artıları ve eksileri havasındayım.

Bilgisayar Tabanlı Sunucu

Artıları

  • Denenmiş ve doğru
  • ölçeklenebilir

Eksileri

  • Aynı anda birden fazla oyunu barındırabilecek bir "çoklu sunucu" yazmanız gerekir. Bu, muhtemelen android telefonunuzdan biraz farklı bir teknoloji kullanacaktır. Hala java kullanabilirsiniz, ancak yine de android paketleri kullanabilir misiniz?
  • Çalıştırılması ve bakımı pahalı olabilir
  • Bir nedenden ötürü bir gün potansiyel olarak aşağı çekebilirsiniz. Sunucu oyunu satın aldıktan sadece birkaç ay sonra kapanırsa hayranlar mutlu olmayabilir.

Peer To Peer bunlardan biri kontrol altında

Artıları

  • Arkadaşlarının istedikleri zaman diğer arkadaşlarına katılabilecekleri geçici sunucular
  • Çok az veya hiç maliyet yok
  • Sunucu kodu istemci koduyla karıştırılır, ayrı bir sunucu uygulaması yazmaya gerek yoktur.

Eksileri

  • Merkezi bir eş bulucu yazmanız gerekiyor. (Birkaç yüz kolay satırda php + mysql'de benimkini yaptım)
  • Sunucular telefonlarda çalışıyor. Telefonlar yavaş olabilir. Tüm hedef telefonlar oyun oynayabilecek mi?
  • Sunucu telefonunun bağlantısı kesilirse ne olur?
  • Bilgisayar korsanlarının girmesi için istemci-sunucudan daha kolay

Bluetooth'a gelince, yukarıdaki eşler arası yöntemine benzer olmasını beklerdim. Ayrıca NAT ile ilgili herhangi bir sorununuz olması gerektiğini de düşünmüyorum.

EDIT : Aynı zamanda büyük ölçüde deneyiminize bağlıdır. Önce ağ asmak için nispeten küçük istemci / sunucu oyunları yazma ile başlar. İlk kez yanlış anlaşılması kolay zor bir konu. Üçüncü denemede benimkini aldım. Bilinen kalıpları takip edin ve kendiniz bir şey uydurmaya çalışmayın.


Bluetooth ile yapılabileceğini sanmıyorum, yayınları desteklediğinden şüpheliyim: AFAIK sadece bir ana bilgisayarı diğerine bağlar, çok düşük bir maksimum bağlantı miktarına sahiptir ve yavaştır.
o0 '.

4

Yapmanız gereken en önemli hususlardan biri güvenilirliktir. Telefonlar çok güvenilir değil; aslında, muhtemelen 8 oyunculu bir oyunda birisinin bağlantısının kesileceğini düşünmelisiniz (gelen çağrı, kötü alım, oyuncu kapanıyor ...)

Bunu akılda tutarak, bağlantısı kesilen bir kullanıcının etkisini en aza indirmeniz gerektiğini anlayın. İkinci seçeneğinizde, esas olarak bir telefon sunucusu yaptınız. Bu telefon MIA'ya giderse, oyun tüm oyuncular için etkili bir şekilde sona erer.

John, geleneksel bir istemci sunucu mimarisinin artılarını ve eksilerini ele aldı. Bu muhtemelen herkes için güvenilir bir çok oyunculu deneyim sağlamanın en esnek yoludur.

Bir kilit adım simülasyonunun çizgileri boyunca bir teknik de düşünebilirsiniz. Bu tamamen eşler arası bir şekilde uygulanabilir. Genel fikir, her müşterinin her simülasyon adımında güncellemesini (komut dizisi veya eksikliği) göndermesi beklenir. Sonraki bir simülasyon adımında, her oyuncunun komutları oyun mantığına uygulanır. Birçok RTS oyunu bu tür bir ağ şeması kullanır.

Tekniğin uygulanması zor olabilir ve hata ayıklaması çok zor olabilir. Kesinlikle daha geleneksel bir istemci-sunucu mimarisine sahip olmaktan daha zordur. Ayrıca bir oyuncunun girdisi ile oyun girdiye cevap verdiğinde bir gecikme anlamına gelir. Ancak, bir oyuncu oyundan ayrılırsa, geri kalan oyuncular onu oyundan çıkarabilir ve devam edebilir. Ayrıca, diğer programlara kıyasla ağ trafiğini de azaltabilir.

Bu teknik hakkında daha fazla bilgi edinmek istiyorsanız , konuyla ilgili bu mükemmel makaleyle başlayın . Aksi takdirde, tek bir telefonun çok oyunculu bir oturumdan sorumlu olduğu bir ağ şemasını şiddetle tavsiye ederim ve daha basit istemci <-> sunucu mimarisini öneririm.

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.