AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Netzwerk-Spiel-Kommunikation
Thema durchsuchen
Ansicht
Themen-Optionen

Netzwerk-Spiel-Kommunikation

Ein Thema von wicht · begonnen am 30. Jul 2007 · letzter Beitrag vom 30. Jul 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#1

Netzwerk-Spiel-Kommunikation

  Alt 30. Jul 2007, 11:08
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 ..
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#2

Re: Netzwerk-Spiel-Kommunikation

  Alt 30. Jul 2007, 11:15
Überträgst du die Daten synchron, also wartest auf die Antwort, bevor dein Programm weiterläuft?
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Netzwerk-Spiel-Kommunikation

  Alt 30. Jul 2007, 11:19
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Nicolai1234

Registriert seit: 21. Feb 2004
1.008 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Netzwerk-Spiel-Kommunikation

  Alt 30. Jul 2007, 11:31
Zitat von wicht:
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.
Könntest du die Bewegung nicht schon von dem Client machen lassen, an dem der Spieler sitzt? Der kann ja im Grund3e auch beurteilen, ob der Zug erlaubt ist. Die Daten gingen dann nur noch zur Kontrolle an en Server und um sie an die anderen Mitspieler weiterzuleiten. Ich denke, so könntest du ein ruckeln verhindern.
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#5

Re: Netzwerk-Spiel-Kommunikation

  Alt 30. Jul 2007, 11:38
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 ...

Danke für die Antworten
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Nicolai1234

Registriert seit: 21. Feb 2004
1.008 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Netzwerk-Spiel-Kommunikation

  Alt 30. Jul 2007, 11:47
Zitat von wicht:
@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 ...
Das stimmt schon, aber de Figur bewegt sich bei dem Spieler sofort. Da entsteht kein ruckeln mehr. Und die anderen Spieler merken ja nicht, ob es eine Verzögerung zwischen Tastendruck es Mitspielers und der Reaktion sehen. Die wissen ja noch nicht einmal, dass derjenige gedrückt hat. Den Ruckler merkt doch nur derjenige, der auch die Taste drückt, oder?
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#7

Re: Netzwerk-Spiel-Kommunikation

  Alt 30. Jul 2007, 11:55
Vielleicht ist für dich der Artikel über die Netzwerkimplementierung von Age of Empires bei Gamasutra interessant. Beschäftigt sich recht ausführlich mit den Problemen, auf die die Entwickler gestoßen sind (wenn auch weniger speziell mit Latenz).

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.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#8

Re: Netzwerk-Spiel-Kommunikation

  Alt 30. Jul 2007, 13:03
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..
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#9

Re: Netzwerk-Spiel-Kommunikation

  Alt 30. Jul 2007, 13:08
Du meinst jetzt aber nicht die Wiederholungsverzögerung der Tastatur, oder?
Kannst du vielleicht den Ablauf vom Tastendruck über die Server-Verbindung bis hin zur Bewegung in Pseudocode zeigen?
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#10

Re: Netzwerk-Spiel-Kommunikation

  Alt 30. Jul 2007, 13:22
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
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz