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

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

11

22.09.2010, 10:25

Wenn er das gesagt hat, was ich gesagt habe, wie kommt er dann auf 10% des Traffics bei Verwendung von relativen Positionen? Das hat doch mit relativ oder absolut nichts zu tun, sondern mit dem Design des Protokolls.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

12

22.09.2010, 15:11

Hallo!

Erstmal danke für die vielen Antworten. Ich hab mir jetzt die Tutorials von FalkT durchgelesen, sie haben mir beim Verständnis von Netzwerkprogrammierung sehr weitergeholfen.

Leider häng ich beim Design meines Spiels weiterhin, vielleicht könnt ihr mir ja helfen:

Da das Spiel ja Tilebasiert ist, kann man sich immer nur 1 Tile fortbewegen (ich glaube dieses System ist um einiges leichter zu implementieren, als wenn man sich pixelweise fortbewegen kann, oder?

Diese Bewegungen basieren auf den Characterspeed der in msec angegeben ist.
Schickt mir ein Client ein Moverequest, wird der Character sofort auf das nächste Tile gesetzt. Für den Server spielt der speed also nur eine Rolle, wenn sich der Spieler ein weiteres mal bewegen will, denn dann wird überprüft ob zb. 1000msec seit der letzten Bewegung vorbei sind, oder nicht.
Der speed spielt allerdings auch eine Rolle für alle anderen cients, denn der speed steht ja in Relation zur bewegungsanimation.

Wo ich jetzt aber noch immer hänge ist folgendes:
Client A sendet Moverequest an server, der server gibt diese information nun an alle anderen clients die wissen müssen dass sich dieser spieler bewegt und setzt ihn dann auf das nächste Tile.

Nun ist seit dem ersten Moverequest und das versenden der information schon etwas zeit vergangen, d. h. dass Client A schon etwas mit der Animation vorne ist. Wie genau kompensiere ich jetzt diesen Zeitverlust?

Kann ich auf irgendeine Art und Weise erfahren, wieviel Zeit seit dem Moverequest vergangen ist? Denn wüsste ich den Zeitverlust könnte ich einfach die Bewegungsanimation bei den anderen clients etwas schneller machen.

Bzw. Event state system:
Das würde doch heißen ich bekomm ein event wie zb. das moverequest und schicke solange an die anderen clients informationen wo die animation gerade sein soll, bis die bewegung vorbei ist, oder?

Wenn ich das richtig verstehe würde dieses system aber total auslastend für den server sein. Nehmen wir an es gibt 30 spieler und an all diese müsste ständig diese informationen über derzeitige position gesendet werden?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

13

22.09.2010, 15:40

Zwei Ansätze:
1) Gehe von schneller Verbindung aus und ignoriere die minimalen Zeit-Unterschiede.
2) Versieh jedes Request und jede Response mit einem Zeitstempel der Versendung. Dieser muss natürlich für jeden Client am Anfang der Übertragung erstmal irgendwie synchronisiert werden um lokale Unterschiede festzustellen und auszugleichen. Ich würde die weglassen, selbst mit Zeitstempeln macht spielen bei mieser Verbindung keinen Spaß.

Beim Event-System würdest du nur senden, wenn ein Bewegungs-Request eingeht und du eine Antwort an alle Clients senden musst, dass sich Spieler/Objekt X von Punkt Y zu Punkt Z bewegen will, eventuell noch mit welcher Geschwindigkeit und den unter 2) erwähnten optionalen Zeitstempeln.
Danach brauchst du eigentlich erstmal nichts mehr senden, bis wieder ein Bewegungs- oder Stopp-Request eingeht, der Server eine unerwartete Kollision feststellt oder ähnliches. Ständige Updates sind dabei eigentlich nicht notwendig.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

14

22.09.2010, 16:00

Zitat

Zwei Ansätze:
1) Gehe von schneller Verbindung aus und ignoriere die minimalen Zeit-Unterschiede.
2) Versieh jedes Request und jede Response mit einem Zeitstempel der Versendung. Dieser muss natürlich für jeden Client am Anfang der Übertragung erstmal irgendwie synchronisiert werden um lokale Unterschiede festzustellen und auszugleichen. Ich würde die weglassen, selbst mit Zeitstempeln macht spielen bei mieser Verbindung keinen Spaß.
Du meinst also ich sollte die Timestamps weglassen?

Auch wenn ich sie weglasse würde mich interessieren wie man Server/Client synchronisieren würde, ist aber auch eigentlich im Moment nicht so wichtig. ^^

Ich werds jetzt mal mit euren Tipps versuchen und mich auch wieder melden wenn neue Fragen auftauchen und natürlich auch um zu berichten wie es funktioniert bzw nicht funktioniert hat. Hehe

Danke nochmals für die großartige Hilfe :)

Werbeanzeige