Einzelnen Beitrag anzeigen

blackfin
(Gast)

n/a Beiträge
 
#1

[Client/Server]: Timer und Latenz-Kompensation

  Alt 20. Aug 2010, 11:47
Mal wieder eine theoretische Frage von mir, ich brauche keinen Quellcode, sondern nur allgemeine Überlegungen, wie man so etwas praxistauglich mit Delphi-Bordmitteln umsetzen könnte:

Ausgangspunkt:
Ich habe einen Server und einen Client.
Nun kennt ja jeder von Spielen zum Beispiel folgendes:
Der Spieler will einen Zauberspruch casten, dieser braucht eine gewisse "Cast-Zeit", sagen wir mal 1,5 Sekunden.

Wie gehen professionelle Spiele mit so etwas um?
1) Wird der Timer für die Cast-Zeit nur Client-seitig gefeuert? Dann kann man den Client relativ leicht manipulieren.
2) Oder aber: Wird an den Server "Spieler will Zauberspruch x casten" gesendet, der Server erzeugt dann ein Timer-Objekt und feuert ein Event an den Client zurück, sobald die Zeit abgelaufen ist. Dann aber hätte man ein Problem mit der Netzwerk-Paket-Latenz und ggf. auch mit der Server-Auslastung, die man irgendwie kompensieren müsste.
3) Wird der Timer auf beiden Seiten erzeugt und dann vom Server synchronisiert? Auch hier das Latenz- / Auslastungs-Problem, das zu Verzögerungen führen kann. (Client ist mit dem Timer immer früher fertig als der Server)

Das gleiche gilt z.B. auch für Spieler-Bewegungen, die ja auch zwischen den Clients synchronisiert werden müssen.

Ich möchte jetzt diesbezüglich nicht die perfekte Lösung in Hinblick auf Genauigkeit der Timer, sondern Überlegungen und vielleicht sogar Erfahrungswerte, wie so etwas von bereits bestehenden Spielen in der Praxis gemacht wird.

Hat jemand von euch sowas schon einmal gemacht?

Geändert von blackfin (20. Aug 2010 um 11:54 Uhr)
  Mit Zitat antworten Zitat