Oyuncu hızı değişiklikleri gönderirken istemciyi ve sunucuyu nasıl senkronize ederim?


10

Müşteri tarafı tahmini uyguluyorum. Çoğu açıklama, istemcinin " Oynatıcımı 1 konum yukarı taşı " gibi mesajlar gönderdiğini varsayar . " Oyuncumun hızını x olarak ayarla " gibi mesajlar gönderirsem ne olur ?

açıklayıcı grafik;  zaman içinde istemci ve sunucuda gönderilen mesajları ve hesaplanan konumları gösterme

İstemcide, oyuncu sunucudan önce kendi hızını (istemci tarafı tahminine göre) belirler ve bu da ikisinin senkronizasyondan çıkmasına neden olur. Bu sorun ortalama gecikme süresi göz önüne alındığında bile devam etmektedir.

Bununla nasıl başa çıkabilirim?

Yanıtlar:


8

Gereksiz verileri göndermelisiniz, bu da burada konumu ve hızı göndermek anlamına gelir. Senkronize olmasanız bile, pozisyona ve hıza sahip olmanız bir enterpolasyon fonksiyonu kullanarak yörüngeyi düzeltmenize izin verir.

Sonra gecikmeli animasyonlar, ivme vb.

Düzenleme: Sunucunun yetkili olduğunu varsayıyorum.


Cevabınız için teşekkürler. Evet, Sunucu otoriter ama benim hız ile gereksiz veri göndermek bile, istemci hatalarını düzeltebilir ama sık sık "istemci / sunucu varlıkları için paylaşılan kod kullanırsa, tahmin hataları asla oluşmayacak" gibi şeyler okuyorum ama benim durumumda, HER ZAMAN biraz meydana gelecektir, bu da her yerde kekemeliğe neden olacaktır.
Blu3

1
@ user13842 istemci her zaman senkronizasyondan çıkacaktır, sunucunun size ne gönderdiğine göre, Thelvyn'in dediği gibi istemci tarafı konumunu ve hızını düzeltmelisiniz. bu şekilde, istemciniz tamamen senkronize olmadıkça kekemelik hareketini elde edemezsiniz, o zaman değerleri yapıştırmanız gerekir, çünkü düzeltme çok fazla zaman alacaktır.
dreta

Enterpolasyon fonksiyonunu kullanmanın ana nedeni budur. Gecikmeyi önleyemezsiniz, bu nedenle hareketi düzgün bir şekilde düzeltmeniz gerekir. İstemci ve sunucu dünyayı simüle eder, ancak istemci sunucuyu dinlemeli ve düzeltmeler yapmalıdır. Kaynak Motoru ağında kullanılan bazı teknikler: developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
Thelvyn

's kısaca o genelinde bir fikir sahibi olmalıdır bunuda google talk belirtilen youtube.com/watch?v=Prkyd5n0P7k#t=18m47s
Dreta

Bu sorun için başka bir çözüm buldum. İstemcinin girdilerini her pakete uyguladığı zamanı ekliyorum. Anlam # 1'in zamanı olurdu: 0 ve ikinci kez: 100. Sunucu artık istemcinin düğmeye bastığını biliyor: 100 ve daha önce değil.
Blu3
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.