2011-01-18 17 views
5
i çok oyunculu bir rol paylaşım oyun geliştiriyorum

, (Hayır, onun değil bir mmorpg;.)Pürüzsüz multiplayer hareketi

Benim şu anki kurulum böyledir.

İstemci "Sunucuyu ileri taşımak istiyorum"/"Geriye doğru gitmek istiyorum" sunucusunu bildirir, sunucu daha sonra varlığınızı günceller ve değişiklikle ilgili alanda bulunan tüm istemcileri bilgilendirir. Sunucu ayrıca her 20 ms'de her bir öğeyi güncelleştiriyor ve her 100 ms'yi istemcilere güncelleştiriyor, bu güncelleştirmeler konum, hız, döndürme vb. Içeriyor.

Şimdiye kadar çok iyi, ancak paketler arasındaki hareketi yumuşatmak için hiçbir şeyim yok. müşteri tarafında ve söylemeliyim ki, çalışamıyorum. Tahmin, enterpolasyon, ölü okuma, ama benim için büyük bir karmaşa üzerinde okumaya devam ediyorum.

Şu an sadece "Position = Packet.Position" gibi bir şey yapıyorum, bu da çok tuhaf bir harekete neden oluyor.

Peki, yardım etmek istediğim şey, nasıl daha düzgün bir hareket elde edebilirim? XNA Tahmin Örneğine bakıyordum, ama doğru anlayamadım.

Teşekkür // F

+0

Sadece oyuncunun hareketlerini daha pürüzsüz veya başka nesneler mi yapmalısınız? Müşteri oyuncunun mevcut hızını biliyor mu? – ssmir

+0

Eh, şu anda sadece oyuncu var, bu yüzden benim ana endişe. İstemci hız hakkında bilgi alır, sunucudan durum paketine dahil edilir. Aslında IRC'ye güzel bir cevabım var, yarın bunu deneyeceğim ve başarılı bir şekilde paylaşacağım. –

cevap

3

ben another question fikri (Kabul cevabı bakınız) İşte

istemci değil, bir ağ oyun sanki konumunu kendisi hesaplar öneririm. İstemci düzenli olarak mevcut konumunu sunucuya gönderir. Eğer müşteri seçilen yönde hareket ederse veya devam edemezse, sunucu müşteriye doğru pozisyonunu gönderir.

aynı algoritma

Ultima Online kullanıldı

+0

Ultima Online'dan bahsettiğin eğlenceli, en sevdiğim oyunlardan biri. :) Mevcut uygulamamla ilgili sorunları bulursam bunu deneyeceğim. Ancak, bu sonuç A ve B oyuncularının gördüğü şey arasında büyük bir fark yaratmaz mı? –

+0

@Fredrik Yep, favorilerimden biri =) Aslında fark, oyuncuların pinglerine bağlı ve tahmin edilebilir. Ama farkın burada herhangi bir rol oynadığını düşünmüyorum çünkü UO’ya birisine saldırdığınızda, istemci saldırıya uğrayan nesnenin kimliğini gönderir. Bu yüzden pozisyonlardaki bazı farklar, yalnızca iki monitörü birbirine yaklaştırıp karşılaştırırsanız fark edilebilir. Oyunu internet üzerinden LAN yerine çalıştırdığınızda ortaya çıkmaya başlamalısınız. Özellikle TCP kullanıyorsanız, herhangi bir paket kaybı saniyeler içinde ölçülen büyük bir gecikmeyle sonuçlanır (en azından). – ssmir

0

(en azından 10 yıl önce onu oynarken) Benim ana biriyle birlikte bir hayalet varlık çalıştırarak bunu çözdü.
Hayalet her kareyi her zaman güncellenir, ancak bir paket geldiğinde, onun değerleri paketin değerlerine ayarlanır.

Ardından, gerçek varlıkları hayaletin bulunduğu yere yavaş yavaş getiriyorum.

+0

böylece oyuncunun hareketi başlattığı an ile hayaletin yeni pozisyonu aldığı an arasında hala bir gecikme var mı? – ssmir

+0

Evet, ancak bu fark edilemez. –