![]() |
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? ;-) |
Re: Frage zu LAN-Pong
"Cheatsicherer" und bei deinen Datenmengen durchaus shcnell genug ist die 2. möglichkeit.
|
Re: Frage zu LAN-Pong
Bei größeren Projekten kommt aber durchaus auch Ansatz1 in Frage?
|
Re: Frage zu LAN-Pong
Nein, immer Lösung 2, machen imho selbst Spiele wie Counter-Strike: Source so.
|
Re: Frage zu LAN-Pong
Zitat:
Pong würde ich jedenfalls nicht als großes Projekt bezeichnen. ;) |
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.
|
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. |
Re: Frage zu LAN-Pong
OKili dokili, danke soweit ;-)
|
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?? |
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. |
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... |
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. |
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 ^^ |
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. |
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.
|
Re: Frage zu LAN-Pong
Zitat:
|
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. |
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