ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4420510
Jetzt (Chat):
29 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-

ZFX
Coding-Foren
Algorithmen und Datenstrukturen
FPS Netzwerksynchronisation Client/Server
Normal
AutorThema
mrz Offline
ZFX'ler


Registriert seit:
07.08.2008

Schweiz
FPS Netzwerksynchronisation Client/ServerNach oben.
Hallo zusammen

Mich plagt nun schon seit längerem die Frage, wie ich
Client/Server schlau synchronisiere.
Konkret bastle ich an einem FPS.

Wie es an einigen Orten beschrieben wird, wird bei mir
erst effektiv mit der Waffe geschossen (bzw. das Projektil gerendert),
nachdem der Server dies "akzeptiert" hat.
(Sonst könnte es relativ unschöne Sachen geben wie z.B.
ich sehe ein Projektil was kurze Zeit später wieder verschwindet
oder "ich denke" ich schiesse, obwohl ich schon tot bin etc.)

Nun das ist soweit okay. Was ist aber z.B. mit einem Sprung?

Folgendes Szenario:
Ich renne auf eine Klippe zu. Kurz bevor ich dessen Ende erreiche (visuell auf dem Client),
mache ich einen Sprung. Es könnte nun der Fall sein, dass wenn
der Server das mitbekommt (also den Sprung, 40ms später oder so),
ich nach seinen Berechnungen bereits das Ende erreicht habe
und jetzt schon am runterfallen bin. Ein Sprung ist also nicht möglich bzw. wird "abgelehnt".


Ist es nicht so, dass wenn ich immer erst die Antwort vom Server abwarte,
die Steuerung sich dann, je nach round-trip-time, "sehr schwammig" verhaltet?
Dafür machen Spieler nicht plötzlich komische Bewegungen
(die ich natürlich mit Interpolation weicher machen kann, aber
wie z.B. beim Sprung nicht ganz verhindern kann).

Ich bin nun z.B. am überlegen, ob ich die Latenz ungefähr feststellen soll,
und dann alle visuellen Sachen (inkl. meiner Spielerposition) dort
rendere, wo es "theoretisch" in x+Latenz sein sollte.
Damit ist das Problem natürlich nicht behoben, aber
die Wahrscheinlichkeit für das Sprung-Szenario ist wohl deutlich kleiner?

Diese Funktionalität werde ich so oder so einbauen, damit man umgekehrt
lokal auch einen Ping simulieren kann (halt wie z.B. in Q3 mit cl_timenudge).

Eine andere Möglichkeit wäre es auf dem Server die Spieler-Position
zu verwenden, welcher er noch vor 40ms hatte. Dann kann der Sprung ausgeführt werden,
könnte aber bei anderen Spieler komisch aussehen.


Momentan tendiere ich irgendwie dazu, immer die Antwort vom Server
abzuwarten (also auch bei z.B. einer "MoveForwardStart-Action"),
da es mir auch sehr viele weitere Probleme lösen würde

Grundsätzlich muss ich dazu noch sagen, dass ich grosse Schwankungen
bei der Verbindumg "ausschliesse" bzw. ich einfach von einem stabilen Ping<200 ausgehe.
Wenn es aber eine Lösung gibt die das auch löst, um so besser.


Wäre super froh wenn mir da jemand einen Tipp oder aus Erfahrung dazu was sagen könnte.
Oder auch wie es in anderen Spielen gelöst wird?




Noch eine ganz andere Frage:
Gehen unter "realen Bedingungen" wirklich (viele) UDP Packete verloren?
Oder war das früher so bzw. passiert nur, wenn die Verbindung eh schon
sehr ausgelastet ist? Gibt es da evtl irgendwo eine Statistik wie das so ist?
Konnte leider keine (aktuellen) Informationen dazu finden :/



Schon mal vielen Dank fürs Lesen
Gruss mrz
30.12.2008, 18:31:13 Uhr
Normal


ZFX Community Software, Version 0.9.1
Copyright 2002-2003 by Steffen Engel