Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Frage zu LAN-Pong (https://www.delphipraxis.net/92040-frage-zu-lan-pong.html)

.chicken 13. Mai 2007 20:00


Frage zu LAN-Pong
 
Also ich will mein Pong Spiel nun Lan/Internet fähig machen und nun hab ich zwei Ansätze zur Umsetzung und wollte fragen welcher der bessere ist.

1.Ansatz:
Der Server verteilt nur die Infos, was die Spieler vorhaben zu tun und dann wird auf jedem Client berechnet was daraus passiert (Kollision oder nicht zB).

2. Ansatz:
Der Server bekommt Infos, was die Spieler machen möchten und verarbeitet sie selber.
Danach gibt er neue Position der Spieler und des Balles raus.

Welcher Ansatz ist besser? Einfacher umzusetzen wäre der Erste denke ich, weil ich da nur die Kommandos hinzufügen müsste, die zum Server geschickt werden.
Beim zweiten Ansatz müsste ich alles auf den Server verlagern.

Aber nun weiss ich nicht ob das so gut ist, weil dann evtl die Spieler die Infos unterschiedlich verarbeiten oder sowas...

Könnt ihr mir dazu was sagen? ;-)

inherited 13. Mai 2007 20:04

Re: Frage zu LAN-Pong
 
"Cheatsicherer" und bei deinen Datenmengen durchaus shcnell genug ist die 2. möglichkeit.

.chicken 13. Mai 2007 20:06

Re: Frage zu LAN-Pong
 
Bei größeren Projekten kommt aber durchaus auch Ansatz1 in Frage?

Die Muhkuh 13. Mai 2007 20:07

Re: Frage zu LAN-Pong
 
Nein, immer Lösung 2, machen imho selbst Spiele wie Counter-Strike: Source so.

Torpedo 13. Mai 2007 20:16

Re: Frage zu LAN-Pong
 
Zitat:

Zitat von .chicken
Bei größeren Projekten kommt aber durchaus auch Ansatz1 in Frage?

Das macht man eigentlich nur bei Strategiespielen wie Siedler so, aber auch dort wird immer wieder mal alles synchronisiert.
Pong würde ich jedenfalls nicht als großes Projekt bezeichnen. ;)

Die Muhkuh 13. Mai 2007 20:17

Re: Frage zu LAN-Pong
 
Siedler, pff. Hab ich früher mit meinem Vater übers Netzwerk gespielt. Jedesmal nach einer halben Stunde kam ein Sync-Error und man konnte nicht mehr spielen.

hibbert 13. Mai 2007 20:19

Re: Frage zu LAN-Pong
 
ich würde auch möglichkeit 2 nehmen.

Kommt bei der ersten Möglichkeit einmal ein Befehl nicht beim Server an, so kann es dauern bis der Client erneut einen befehl sendet. so läuft bei beiden Spielern dann nicht mehr das gleiche Spiel, also nicht mehr wirklich Synchron. Bei der 2. Möglichkeit ist dies ja nun ausgeschlossen, bzw es fällt nicht so sehr auf, da die Daten in dem Fall öfter übertragen werden. So ist es dann nun auch nicht mehr ganz so schlimm, wenn mal ein Datenpaket nicht ankommt, so würde das Spiel dann nur Ruckeln und nicht asynchron laufen.

.chicken 13. Mai 2007 20:47

Re: Frage zu LAN-Pong
 
OKili dokili, danke soweit ;-)

.chicken 13. Mai 2007 22:01

Re: Frage zu LAN-Pong
 
Dann aber nochwas dazu:
Wenn jetzt ein Client mit der Umwelt agiert, dh in meinem Fall, dass ich das Panel in den Ball bewege (das geht bei mir, Ball kann an allen vier Rechteckseiten kollidieren), dann müsste ich den Ball ja direkt verschieben. Soll ich dann einfach die neue Ballposition auch an den Server schicken?

Oder muesste sowas dann wieder auf Serverseiten geregelt werden?
Also die Spielerbewegung läuft doch direkt beim Client ab oder nicht??

DGL-luke 13. Mai 2007 22:16

Re: Frage zu LAN-Pong
 
hallo,

mach es so: Du schickst an den Server, was du machen willast, und machst es auf dem client schon. wenn dann vom server die rückmeldung kommt, musst du von der lokalen darstellung zur serverdarstellung interpolieren.

.chicken 13. Mai 2007 22:26

Re: Frage zu LAN-Pong
 
Öh, sry aber was meinst du mit interpolieren genau? ^^
Dass ich die Werte wieder zurücksetze wenn sie vom Server abweichen?

Also das Problem was ich eben bisher sehe ist, wenn auf dem Server die Position des Balls schon aktualisiert wurde, aber beim Client noch nicht, dann würde das Ergebnis ja total verfälscht...

3_of_8 13. Mai 2007 22:31

Re: Frage zu LAN-Pong
 
Wikipedia. Interpolieren bedeutet, dass du anhand von mehreren gegebenen Einzelwerten eine Funktion findet, die diese Werte möglichst gut "trifft".

Anschaulich gesagt:

Wenn du bei t=0s den Wert 0 gegeben hast, bei t=1s den Wert 1 und bei t=2s den Wert 2, dann ist deine Interpolationsfunktion f(x)=x.

Bei Pong wirst du zum Beispiel das "Problem" haben, dass dir der Server bei t=0s für den Schläger den y-Wert 32 liefert und für t=0.4s den y-Wert 42. In diesem Fall nimmst du einfach die Differenz der Zeit und die Differenz des y-Wertes und teilst deltaY durch deltaT, um die Werte dazwischen zu interpolieren. Die Funktion wäre hier f(x)=x*(42-32)/(0.4-0)=x*10/0.4=25x. Für t=0.1 ergibt sich also der Differenzwert 0.1*25=2.5.

.chicken 13. Mai 2007 22:38

Re: Frage zu LAN-Pong
 
Hm, also in andere Worte gefasst, korrigiere ich den Wert beim Client später ein wenig???

Würde das denn nicht komisch aussehen? Dann würde ich ihn zB erst nach oben bewegen und hinterher wieder ein Stück zurück. Oder soll ich dazwischen nicht Zeichnen? Ich hab das dumpfe Gefühl wieder mal alles total falsch verstanden zu haben ^^

Torpedo 13. Mai 2007 22:42

Re: Frage zu LAN-Pong
 
Ich würde das so machen:
Client sendet die aktuelle Position des "Schlägers", wenn er bewegt wurde.
Server leitet das an den anderen Client weiter.

Der Server berechnet die Position usw des Balls und sendet die Position dauernd an die Clients. Diese zeigen ihn dann nur noch an. Also auf den Clients wird der Ball nicht bewegt, nur angezeigt.
Auch ob jemand einen Punkt gemacht hat sagt der Server.

3_of_8 13. Mai 2007 22:44

Re: Frage zu LAN-Pong
 
Nein. Du bekommst ja deine Werte immer nur in bestimmten Intervallen, dazwischen musst du eben berechnen, wie der Wert sein "könnte", weil die Bewegung sonst sehr stark ruckeln würde.

Torpedo 13. Mai 2007 22:49

Re: Frage zu LAN-Pong
 
Zitat:

Zitat von 3_of_8
Nein. Du bekommst ja deine Werte immer nur in bestimmten Intervallen, dazwischen musst du eben berechnen, wie der Wert sein "könnte", weil die Bewegung sonst sehr stark ruckeln würde.

Ich habe auf diese Art ein kleines Rennspiel programmiert. Da hat nichts geruckelt. Man muss natürlich aufpassen, dass die Daten, die man sendet nicht zu groß sind, wie: "Setze Ball auf Position 100,100" sondern "S100100".

3_of_8 13. Mai 2007 23:35

Re: Frage zu LAN-Pong
 
Die Größe der Daten ist bei den heutigen Bandbreiten beinahe egal (solange du es nicht übertreibst). Das eigentliche Nadelöhr ist die Latenzzeit.
Im LAN mag das ohne Interpolation funktionieren, aber im Internet, wo du Latenzzeiten von 100 ms einkalkulieren musst, macht sich sowas definitiv bemerkbar.

.chicken 14. Mai 2007 10:26

Re: Frage zu LAN-Pong
 
Hm, das klingt logisch.....
Dh der Client müsste auch die Bewegung des Ball kennen...oder?
Dann läuftss aber doch fast darauf hinaus, das alles gleichzeitig beim Client und beim Server abläuft....!? Also wenn ich den Ball auch beim Client bewege muss ich da ja auch auf ne Kollision achten und so...

Edit: Könnte mir das evtl jemand etwas genauer erklären? Das wär sehr nett, weil ich da echt kein Plan hab wie ich das umsetzen soll.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 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 by Thomas Breitkreuz