![]() |
Netzwerk-Spiel-Kommunikation
Hallo Delphi-Freunde!
So, ich hätte da mal eine kleine Frage und hoffe, ihr könnt mir dabei irgendwie weiterhelfen.. Ich habe ein Spiel gebaut, es besteht aus Server und Client, der Client schickt Bewegungsdaten des Spielers an den Server (z.B. Gehe-1-nach-oben), der Server kontrolliert diese Daten und wenn die Bewegung zeitlich erlaubt ist (damit sich nicht einer schneller bewegt als der andere) und die neuen Koordinaten okay wären, wird die neue Y-Position des Spielers an alle anderen Clients geschickt. Dann bewegt sich der Spieler überall, so wie es sein soll. Die Kommunikation erfolgt über die ICS-Sockets, übertragen tue ich nur Records die aus vielleicht 3 Bytes und einem Double/Integer bestehen, um die Datenmenge möglichst gering zu halten. Das läuft auch ganz toll, ich war richtig begeistert, nur dann kam der Rückschlag: Lasse ich den Server auf einem anderen Computer laufen und verbinde mich dahin, ruckeln die Bewegungen irgendwie teilweise, z.B. bei der ersten Bewegung (Spieler drückt Taste-hoch und lässt sie gedrückt, dann stockt es am Anfang der Bewegung). Nach dem anfänglichen Stocken geht es dann aber ganz normal, nur das wiederholt sich natürlich immer und ist auf Dauer sehr nervig. Und das war nur im Netzwerk - übers Internet wird es dann wohl noch schlimmer sein... Bevor ich jetzt an irgendelchen Sachen rumpfusche, wollte ich sicherheitshalber mal fragen, was ich da am besten machen könnte.. Irgendjemand hat soetwas vielleicht schon einmal gemacht? Wäre sehr dankbar für Antworten :) .. |
Re: Netzwerk-Spiel-Kommunikation
Überträgst du die Daten synchron, also wartest auf die Antwort, bevor dein Programm weiterläuft?
|
Re: Netzwerk-Spiel-Kommunikation
Das Problem sind (soweit ich sehe) die Rount-Tripp-Delays. Jeder Netzwerkverkehr benötigt eine Zeit welche schon in den ms-Bereich gelangen kann. Teilst du deine Kommunikation in viele kleine "Häppchen" welche auch noch per TCP gesichert übertragen werden ist Ruckeln nicht mehr zu vermeiden.
- Für LAN-Lösung wäre ein Implementierung ohne Server vor Vorteil - Kommunikation mit UDP statt TCP Es gibt mit Sicherheite weiter Optimierungen, aber ich bin kein Spiele-Entwickler. |
Re: Netzwerk-Spiel-Kommunikation
Zitat:
|
Re: Netzwerk-Spiel-Kommunikation
Hallo!
Hätte so schnell nicht mit 2 Antworten gerechnet, super! @OregonGhost: Synchron läuft nur Handshake und sowas ab. Das eigentliche Spiel nicht. Der Client ist angemeldet und schickt Tastatureingaben weiter, der Server verarbeitet diese. Sind die empfangenen Daten ungültig, wird der Client rausgeworfen und bekommt vorher eine Fehlermeldung zugeschickt. @Bernhard Geyer: Also, ohne Server geht es nicht. Der muss auf jedenfall dabei sein. Daran hatte ich auch schon gedacht, aber ist leider nicht möglich. Tja, die Kommunikation läuft über TCP. Das heißt, ich sollte auf UDP umsteigen? Kleine Nebenfrage: Ist das per UDP bei den meisten Onlinespielen gemacht, die Übertragungen mit geringer Latenz brauchen? UDP verzichtet auf Korrektur von falschen Übertragungen - gibt es sonst noch Unterschiede, die sich eventuell auch nachteilig auswirken könnten? @Nicolai1605: Klar könnte ich die auch vom Client aus machen. Aber nehmen wir an, ich habe 6 Spieler auf einer Karte und einer bewegt sich - Ob ich die Daten dann an die 5 anderen schicke, oder auch noch an den, der diese gesendet hat, macht den Kohl vermutlich nicht fett dachte ich mir. Ausserdem ist es weniger Arbeit :stupid: ... Danke für die Antworten :thumb: |
Re: Netzwerk-Spiel-Kommunikation
Zitat:
|
Re: Netzwerk-Spiel-Kommunikation
Vielleicht ist für dich der
![]() Was Nicolai sagt, ist aber auch nicht unbedeutend, es geht dabei darum, auf dem Client schonmal "loszulaufen" in der Hoffnung, dass der Server sein OK nachträglich noch gibt. Dann hast du keine Verzögerungen auf Clientseite. Und was ich oben mit synchron meinte, ist die Frage, ob du auf die Antwort des Servers wartest. Tust du es nicht, sollte auch kein Ruckeln entstehen. |
Re: Netzwerk-Spiel-Kommunikation
Achso, eine Kleinigkeit noch: Es ruckelt ja nicht direkt, aber wenn ich eine Bewegung anfange, z.B. von links nach ganz rechts über die Karte, dann hakt es nur ganz kurz beim Anfangen der Bewegung, der Rest läuft flüssig. Und jede Positions-Änderung kommt ja vom Server. Das finde ich irgendwie merkwürdig..
|
Re: Netzwerk-Spiel-Kommunikation
Du meinst jetzt aber nicht die Wiederholungsverzögerung der Tastatur, oder? :stupid:
Kannst du vielleicht den Ablauf vom Tastendruck über die Server-Verbindung bis hin zur Bewegung in Pseudocode zeigen? |
Re: Netzwerk-Spiel-Kommunikation
Nee, die meine ich nicht. Wenn ich Server und Client lokal laufen lasse, ist dieses "Ruckeln am Anfang" ja auch nicht mehr da.
Code kann ich zeigen, wenn ich wieder zuhause bin. Werde ich dann direkt machen ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz