Reibungslose MultiPlayer-Bewegung
ich bin der Entwicklung eines multiplayer-Rollenspiel (Nein, es ist nicht ein mmorpg. 😉
Mein Aktuelles setup ist wie folgt.
Client teilt dem server mit, "ich möchte mich vorwärts bewegen"/"ich möchte, sich rückwärts zu bewegen", wird der server aktualisiert dann die Entität, und informiert alle Kunden in der Umgebung über die änderung. Der server ist auch aktualisiert jede Entität alle 20ms und senden von Aktualisierungen alle 100ms an die clients diese updates beinhaltet position, Geschwindigkeit, rotation etc.
So weit So gut, jedoch habe ich nichts im store zur Glättung der Bewegung zwischen der Pakete auf die client-Seite, und ich muss sagen, ich kann nicht mehr arbeiten. Ich habe gelesen, bis auf die Vorhersage, interpolation, deadreackoning aber es ist alles ein großes Durcheinander für mich.
So jetzt bin ich gerade etwas wie "Position = Packet.Position", wodurch eine sehr stockende Bewegung.
Also, was ich möchte helfen, mit ist, wie bekomme ich eine glatte Bewegung? Blick auf die XNA-Vorhersage-Beispiel, aber ich konnte es nicht Recht.
Dank //F
Gut, derzeit habe ich nur Spieler, damit ist meine größte Sorge. Der Kunde weiß über die Geschwindigkeit, es ist in der status-Paket vom server. Tatsächlich bekam ich eine nette Antwort auf IRC, werde versuchen es morgen und wenn Ihr erfolgreich ich werde.
InformationsquelleAutor Fredrik Widerberg | 2011-01-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde vorschlagen, die Idee von eine andere Frage (siehe die akzeptierte Antwort)
Hier der client berechnet seine position selbst " als wenn Ihr nicht ein Netzwerk-Spiel. Client regelmäßig sendet seine aktuelle position an den server. Und wenn der Kunde cheats oder können nicht weiter in die gewählte Richtung, server sendet dem client seine korrekte position.
Den gleichen Algorithmus verwendet wurde, die in Ultima Online (zumindest wenn ich spielte es vor 10 Jahren)
Yep, einer meiner Favoriten auch =) Eigentlich der Unterschied wird davon abhängen, die pings von den Spielern und geschätzt werden kann. Aber ich glaube nicht, dass der Unterschied spielt keine Rolle, weil hier z.B. wenn du jemanden angreifen in UO sendet der client die ID von dem Objekt angegriffen zu werden. So einen Unterschied in den Positionen können nur bemerkbar, wenn man zwei Monitore nebeneinander und vergleichen Sie. Probleme sollten beginnen zu erscheinen, wenn Sie das Spiel laufen über das Internet statt LAN. Vor allem, wenn Sie die Verwendung von TCP, da jedes packet loss Ergebnisse in einem riesigen lag-gemessen in Sekunden (mindestens).
InformationsquelleAutor ssmir
Lesen Valve Beschreibung Ihrer multiplayer-Protokoll. Es sollte lehrreich sein, und gibt ein sehr klares Beispiel, wie man die Vorhersage/interpolation.
InformationsquelleAutor I82Much
Ich löste es, indem Sie eine ghost-Einheit neben mit mein main ein.
Der Geist wird aktualisiert, jedes frame so gut, aber immer wenn ein Paket kommt, seine Werte sind die Werte der Paket.
Ich dann schrittweise optimieren die reales Wesen, wo der Geist ist.
Yep, dies ist jedoch nicht spürbar.
InformationsquelleAutor Fredrik Widerberg