Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

11

27.10.2007, 14:42

Das Problem das ihr da ansprecht kann durch Parallele Zustandsmaschinen (PSM) gelöst werden (siehe Gems 4, S. 591).

Zusammengefasst gibt es für jede Clientaktion einen Zustand, den der Spieler annehmen kann: Bsp: Wenn der Charakter sich vorwärts bewegen soll, dann wird er in jenen Zustand versetzt und schickt eine Anfrage an den Server den Spieler soundso in eben diesen Zustand zu versetzen. In der Zwischenzeit wartet der Client natürlich NICHT auf die Antwort des Servers, sondern setzt seinen Spieler in den gewünschten Zustand, und verfährt so, als wäre er gültig!
Auf der Serverseite bekommt dieser die Zustandsänderungsanfrage und überprüft ob der Zustandwechsel in Ordnung ist. Wenn ja, schickt er die Zustandsänderung an alle anderen Clients. Wenn nicht, korrigiert er den Zustand, und schickt die Änderung an alle Clients und die Korrektur an jenen der die Änderung verlangt hat.
Wenn nun der Client eine Korrektur erhält, wird er sofort in jenen Zustand versetzt, ohne lang zu überprüfen, ob das "legal" ist.

Somit sind alle PSM immer konsistent, und nur der Client, der eine ungültige Zustandsänderung vornehmen will (sei es weil er Cheater ist, oder wegen eines Lags!), erfährt eine Zurücksetzung seiner PSM!


Bezüglich der Physik, finde ich, sollte nur der Server die gültige Konfiguration kennen, und alle ÄNDERUNGEN (das heißt bei Änderung der Geschwindigkeit oder Winkelgeschwindigkeit) an die Clients senden. Der Rest der Physik wird auf den Clients (aus v und w (omega)) berechnet. Somit müsste alles immer konsistent bleiben, sofern man den Änderungen einen Zeitstempel verpasst, damit der Client dementsprechend reagieren kann, und damit die Position RICHTIG aktualisiert (Positionsrekonstruktion!!)! Bei nicht allzugroßen Änderungen dürfte es dann keine unschönen Zurücksetzungen mehr geben. Kollisionserkennung und Response werden zwar auch auf dem Client berechnet, aber nur als VORHERSAGEN verwendet. Die wirklichen Daten bekommt dieser dann vom Server. (Bei Kollisionen kann es sein, dass der Server zusätzlich zu v und w auch ncoh die absolute Ausrichtung und Position senden muss, da es möglicherweise schwierig werden könnte die richtige Position zu rekonstruieren (wegen der verwendeten Deltafunktion bei der Collisionresponse! (Unstetigkeit!))
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

12

27.10.2007, 14:55

Also genau das was wir da oben schon stehen haben, nur eben präziser formuliert.

Wobei es fraglich ist ob diese Technik "erstmal machen, dann korrigieren" wirklich so gut ist. Weil man selbst wird den Anschein haben, dass die Änderungen ohne Latenz durchgeführt werden, aber die anderen sehen immer den Zustand, den der Server als letzen gültigen festlegt.
Also kann es so zu diesen hässlichen Streits kommen "hey, was ist das für ein Sch***??? Ich habe mich doch schon längst wegbewegt! Ich habe es genau gesehen!!!" - "Nein, du standest genau auf der Granate! Das war deutlich zu sehen!". Also ich weiß nicht was besser ist. Mit Verzögerung sich zu bewegen oder tot zu sein ohne genau zu wissen warum...
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

13

28.10.2007, 21:26

Also ich find zweiteres eindeutig besser! Da es dann auch nicht sooooo oft zu solchen Streits kommt, und afaik machen es auch die meisten EgoShooter und Rollenspiele genau so!
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

14

06.12.2007, 23:22

Ich habe mal eine Runde UT 03 bei einer ziemlich schlechten Verbindung gespielt. Dabei sind mir 2 Dinge aufgefallen:
1. Man wird manchmal vom Server auf eine alte Position zurückgesetzt: d.h. wenn man lief aber der Server fand das nicht ok, stand man nach 1-2 Sekunden wieder da wo man losgelaufen ist. Das ist ja das prinzipiell angesprochene, dass der Client erst einmal macht und dann guckt, was der Server davon hält. Solange die Verbindung einigermaßen ok ist, wird der Client sich also extrem flüssig bewegen können, was nicht schlecht ist.
2. Anders sah es bei Schüssen aus. Die wurden irgendwie erst abgegeben, wenn der Server es wollte. Ich konnte also eine Rakete abschießen, nach vorne laufen, dabei nach oben gucken und sehen, wie die Rakete mich überhohlte (wenn ich direkt nach dem schießen, bergab gegangen bin). Naja, vielleicht wurde das eingebaut, damit der Spieler sich nicht sagen kann "den hab ich aber ganz eindeutig getroffen" oder so.
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige