Bunu, hem geçici bir ağ üzerinde hem de kablosuz bir hotspot üzerinden çalışan ticari bir PSP yarış oyunu için yaptım. (Veya isterseniz Internet'teki statik bir sunucuya)
2. noktadan dolayı sistemin optimizasyon açısından karmaşık olması gerekmez
Benim tecrübelerime göre, bu doğru değil. Kablosuz aygıtlar (özellikle küçük taşınabilir aygıtlar) kablolu ağ bağlantısına sahip bilgisayarlar gibi değildir - akıllı telefonlar ve kablosuz oyun konsolları, oyun amaçları için yavaş ağ arabirimlerine sahip olma eğilimindedir.
Beni yanlış anlamayın - verimleri genellikle iyidir (yani, saniyedeki veri miktarı; film akışı vb.İçin harika), ancak belirli bir paketin teslim edilmesindeki gecikme son derece kötü olabilir ve herhangi bir paketin ne kadar sürede teslim edileceğini tahmin etmek bile zor olan oldukça değişken. Sinyalleri birbirini etkilemeye başladığı için, daha fazla kablosuz cihaz bir genel alana bir araya getirildikçe bu varyasyon daha da kötüleşir. Bunun sonucunda, gönderilmesi gereken paket sayısını azaltmak için çok fazla zaman harcadım, bu yüzden daha az paket çarpışması yaşayacağız. (Bunun, cihazların doğrudan bir ad hoc ağ üzerinden birbirleriyle doğrudan konuşmasını sağlamak yerine, enerjili bir ağ etkin noktasının söz konusu olması durumunda bunun daha az sorun olduğunu unutmayın)
Bu tür bir optimizasyon örneği olarak, yarış oyunumuz trafik ışıkları olan bir dünyada gerçekleşti. Binlerce. Ve bir ağ oturumundaki tüm oyuncular arasında sinyallerinin senkronize olduğundan emin olmamız gerekiyordu. Herkese hangi ışıkların hangi durumda olduğunu söylemek için paketler göndermeye çalışmak yerine, tüm trafik ışıkları için statik bir program tanımladık ve daha sonra tüm müşterilerin mevcut "oyun zamanı" üzerinde anlaştıklarından emin olduk. Hepsi oyun zamanını bildiğinden ve tüm trafik ışıklarının durumları oyun süresinden belirlendiğinden, tüm bu durum verilerini gerçek bir özel veri göndermeden senkronize ettik. Bu tek değişiklik, ağ performansımız için büyük bir fark yarattı.
Bununla birlikte, birden fazla kablosuz cihaz arasında güvenilir bir saat senkronizasyonu oluşturmak (büyük ölçüde paket kaybına bağlı olarak çok farklı ping süreleriyle) büyük bir zorluktu. İlginiz varsa bunun hakkında daha fazla konuşmaktan mutluluk duyarız.
Her müşteri kendisi ve yakın çevresi (örneğin madde işaretleri) hakkında yetkili bir veri kaynağı olabilir.
Yaptığımız şey bu ve bizim durumumuzda (arabalar) bizim için iyi çalıştı. Sorunlu kısım, elbette, bir nesnenin 'a' oyuncusuna 'b' oyuncusundan daha yakın durmasıdır ve bu nedenle mülkiyeti bir oyuncudan diğerine transfer olur.
Bu aslında 'a' oyununun 'b' oyununu önerdiği 'oyuncular arasında şaşırtıcı derecede karmaşık bir müzakere: "Bence bu nesne size daha yakın. Bunu kontrol etmelisiniz." Ve sonra 'b' oyunu kendi durumuna göre ya kabul edebilir ya da reddedebilir. 'A' ve 'b' arasındaki algılanan oyun durumundaki farklılıklar ve istek ile yanıtın gönderilip alındığı zaman arasındaki değişiklik, bu durumu güvenilir olmak için özellikle kötü bir müzakere haline getirir ve bir oyuna kolayca dönüşebilir "sıcak patates", nesne sahipliği sürekli birden fazla oyuncu arasında etrafında sıçrayan. Ve düzgün çalıştığında bile, 'c' oyununun bakış açısından bakıldığında, orada '
Benim sezgim, bu tür "nesne sahipliği" yaklaşımının, mermi gibi küçük, kısa ömürlü nesneler için çok külfetli olması. Simülasyonda nispeten uzun bir süre yaşamak eğiliminde olan trafik arabaları ve AI yarışçıları için kullandık. Eğer müşterilere güvenmek istiyorsanız, her oyuncunun oyununun kendi pozisyonlarına ve mermilerine sahip olması ve o oyuncunun bir başkasının mermisi tarafından vurulduğunu beyan etmesi daha performanslı bir yaklaşım gibi görünüyor. ("A oyunu" olarak, A oyuncusu ve A oyuncusu mermilerinin nerede olduğunu söylemekten sorumluyum, ancak B oyuncusu B oyuncusuna vurup vurmadığımı söylemekle sorumludur). Bazı iyi ölü hesaplamaları ile, böyle bir sistemden oldukça makul davranışlar elde edebilmelisiniz.