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

1

25.02.2014, 15:12

Spielerpositionen synchonisieren

Hi,

ich habe eine Frage zum Thema Synchronisierung von Spielerpositionen.

Es handelt sich um eine Art Jump'n'Run, bei dem simple 2D-Spieler rumlaufen etc.

Im Multiplayer gibt es dann halt pro Spieler eine "Figur", die sich möglichst so bewegen soll, wie sie das bei dem Spieler auch tatsächlich tut.

Angefangen hab ich damit, einfach die Positionen zu übermitteln - funktioniert, sieht aber nicht gut aus, da es natürlich stark laggt.
Daher habe ich nun auch noch die aktuelle X- und Y-Geschwindigkeit übermittelt - und lasse die Spieler sich so lange in diese Richtung bewegen, bis eine neue Positions- und Geschwindigkeitsaktualisierung kommt.

Das sieht schon ganz OK aus, allerdings ist es noch nicht perfekt...

Daher wollte ich fragen, ob hier jemand Ideen hat, wie ich das ganze noch besser machen kann.

Danke schonmal!

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

25.02.2014, 16:05

Der Client muss ebenfalls eine Instanz des Spiels besitzen. Alle Berechnungen müssen Deterministisch sein. D.h. sie müssen auf dem Client genau so ablaufen wie auf dem Server. Dann übermittelst du nur Spielereingaben und evtl. Zufallszahlen bzw. Seeds. Eben alles was nicht vorhersehbar ist.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Cookiezzz

Frischling

Beiträge: 91

Wohnort: Deutschland

Beruf: Schüler

  • Private Nachricht senden

3

25.02.2014, 16:10

Hi,
der Trick ist, deine Spieler leicht "in die Vergangenheit" zu versetzen, d.h du kannst dann zwischen zwei bekannten Positionen interpolieren. Einen guten Artikel gibt es hier https://developer.valvesoftware.com/wiki…ayer_Networking .
Für dich sollte der Abschnitt "Entity interpolation" interessant sein. :)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

25.02.2014, 22:06

"client side predition" ist auch ein Stichwort was dir weiterhelfen könnte (im Prinzip machst du das ja schon). Von NachoMan Vorschlag kann ich übrigens nur abraten. Zwar sollte alles deterministisch sein, aber effektiv scheitert es fast immer irgendwann. Daher ist es meiner Erfahrung nach "Zustände" statt "Änderungen" zu übermitteln. Sprich lieber "der Spieler war zum Zeitpunkt t1 am Ort1 wird zum Zeitpunkt t2 am Ort2 sein".
Oder z.B. auch besser den Ressourcenstand als die Änderung übermitteln. Denn wenn mal was schief läuft, bekommt der Spieler es nur an dem "Lag" mit. Das Spiel ansich kann dann aber weiterlaufen und der Client findet auch wieder ins Spiel zurück.
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.

Werbeanzeige