Saniyede yalnızca 30 güncellemeye (veya daha az belki 10 veya 20) ihtiyacınız var. istemci tarafındaki hareketli nesnelerin pozisyonlarını enterpolasyon yapar. Genelde yalnızca GERÇEK gerek duyulduğunda veri göndermelisiniz. WoW'da, aynı gruptaki oyunculardan bir grupta olduğunuz oyunculardan daha fazla güncelleme alabilirsiniz. Ayrıca, başka bir oyuncu senden uzaktaysa, saniyede saniyede o kadar fazla güncelleme almazsın.
Ardından, her oyuncuya bağlandığında yalnızca bir tam görüntü gönderir. Bundan sonra sadece oyun nesnelerinin değişikliklerini gönder. Herhangi bir değişiklik olmadıysa göndermeyin.
Ardından, BitVectors'ı yoğun şekilde kullanın, ancak gereksiz veri miktarını azaltmak için onları çağırabilirsiniz! Örnek: Yalnızca bir bayt kullanarak (0 - 1 veya -1 - 1 aralığında) bir float yazmayı da deneyebilirsiniz, böylece yalnızca 256 veya 128 farklı değeriniz olur. Ancak oyuncu enterpolasyonlar sayesinde sarsıntılı hareketler farketmeyecek.
Verileri nasıl sıkıştıracağınıza ilişkin LidgrenLibrary örneğine bakınız: http://code.google.com/p/lidgren-network-gen3/wiki/Optimization
Sonraki: Oyuncular hareket ettikçe görüş yarıçapını azaltmaya çalışın ve o zaman yalnızca önemli bilgileri iletin. Sonra durduklarında tekrar görünüm yarıçaplarını arttırın. "Menzilli" olan nesnelerin aranmasını azaltmak için uzamsal bir karma sistemi veya bir bsp ağacı kullanabilirsiniz. Bu konu için iyi bir okuma: http://en.wikipedia.org/wiki/Collision_detection
Ayrıca veriyi SİZİN KENDİNİZİ yalnızca veri yapısı ve verilerdeki zamansal tutarlılık hakkında bilmek (bundan yararlanılabilir ve yararlanılmalıdır) bilir. Bzip2, Deflate, ne olursa olsun, gibi genel bir algoritma kullanılmalıdır, ancak yalnızca sıkıştırmanın son aşaması olarak kullanılmalıdır!
Ayrıca, oyun kritik olmayan bilgiler için, ek P2P teknikleri de kullanabilirsiniz. Örnek: Bir oyuncu "merhaba" animasyonunu oynatır. (Sadece grafiksel bir etki) Oyuncu bu bilgiyi sunucuya gönderir, fakat sunucu bilgiyi diğer oyunculara aktarmaz. Bunun yerine bu kritik olmayan etki oyuncu tarafından menzil içindeki diğer istemcilere gönderilir.
EDIT (yorum nedeniyle):
Her oyuncuya saniye başına ortalama bit sayısını azaltmak için ek yöntemler:
"Nesne değişmedi" gönderdiğinizi yazdınız. Bunu yapmak için hiçbir sebep yok. Paket kaybı konusunda endişeleniyorsanız (ve bu nedenle simülasyonunuzu senkronize etmeden çıkarmak) aşağıdakileri göz önünde bulundurun: Her bir sabit zaman diliminde (ör. 100, 200, 300, 400 ...) simülasyon durumunu özetleyin ve sunucuya gönderin . Sunucu tüm verinin tam bir görüntüsünü onaylar veya gönderir.
Roket ve hatta oyuncular gibi şeyler için simülasyonu daha gerçekçi hale getirmek amacıyla sadece enterpolasyonu değil, ekstrapolasyonu da kullanabilirsiniz. Örnek 'Roket': "Şimdi x konumunda mı?" Gibi mesajlarla güncellemek yerine, sadece aşağıdakileri içeren bir mesaj gönderin: "Roket Yumurtlandı: pozisyon (vektör), Zaman (simülasyon adımının roketin doğduğu yer), hız ( vektör)". Böylece dönüşü dahil etmeniz gerekmiyor, çünkü uç daima "hız" yönünde olacaktır.
Birden çok komutu tek bir mesajda birleştirin ve udp başlığı mesajın kendisinden daha büyük olacağından, asla 16-20 bayttan daha küçük mesajlar göndermeyin. Ayrıca protokolünüzün MTU'sundan daha büyük paketler göndermeyin, çünkü parçalanma iletim hızını yavaşlatır.