Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

27.09.2009, 16:41

Der Richtungsvektor ist eigentlich sehr wichtig.
Anhand der neuen Position und des Richtungsvektors kannst du sehr genau vorhersagen, wie sich die entsprechende Spielfigur bewegen wird.
Bei 2 Punkten kannst du die Richtung zwar bestimmen, jedoch wird sie nach überqueren des Punktes sehr wahrscheinlich eine höhere Fehlerquote aufweisen.

Schau nochmal auf meine Grafik. Du hast den Punkt und die Richtung. Jetzt kannst du die Gerade einfach weiter entlang gehen.
Würdest du nur den neuen Punkt nehmen, würde die Figur sich in eine föllig andere Richtung bewegen, als es vorgesehen ist.
Zumal es von der Berechnung einiges spart, den die Richtung würdest du normalisiert schicken,d.h. deine Rechnung sieht so aus Punkt * Richtungsvektor * Geschwindigkeit * Vergangene Zeit
Bei 2 Punkten müsstest du vorher den Richtungsvektor bestimmen und ihn nochmal normalisieren und dann obige Rechnung ausführen.

Und ich spreche jetzt nur von der Bestimmung der realen Bewegung. Die Berücksichtigung von falschen Ausgangspositionen ist da jetzt noch gar nicht dabei.

EDIT: Ich sehe du hast es ja schon drinn
Ergebnis = Wertpaar1 + Faktor*(Wertpaar2 - Wertpaar1)

Wertpaar2 - Wertpaar1 gibt dir den Richtungsvektor. Diesen musst du dann noch normalisieren.
Und genau das würdest du dir sparen können.
Es reicht doch wenn der client jedes Spielers das für sich macht und es nicht noch für alle anderen Figuren machen muss (wenn du die Figur auf dem Server bewegst ist es das gleiche, denn dort musst du es eh machen).

12

29.09.2009, 15:28

Also ich hab mir das jetzt mehrmals durchgelesen und steig nicht dahinter was du meinst...

Soll ich nun so eine Rechnung ausführen für ein einigermaßen gutes ergebnis oder nicht ?

Bei mir gibt es auch nur geradlinige Bewegungen heißt also die Figuren können keine Kurven oder Schrägen laufen.

13

29.09.2009, 17:12

Ich würde es so machen.

Auf dem Client, der die Figur bewegt, wird die Position und der entsprechende Richtungsvektor berechnet und normalisiert.
Beides schickst du an den Server, der es wiederum verteilt.

Auf den anderen Clients hast du dann die Position und du hast den Richtungsvektor, mit dem du deine Positionsvorhersage machen kannst.

Wenn du auf dem Client dann sprünge vermeiden willst, musst du die Richtung von der Aktuellen Position (also die Stelle, an der die Figur steht) zu der neuen Richtung berechnen und entsprechend bewegen.

Solange keine neuen Meldungen verschiebst du die zuletzt empfangene Position in die empfangene Richtung (natürlich abhängig von der Geschwindigkeit und der vergangenen Zeit).
Dann machst du wieder das Gleiche, also du bestimmst die Richtung von der position, an der die Figur steht, zu der eben berechneten.



Zu dieser Methode muss ich aber noch folgendes sagen.
- Es ist bestimmt nicht die Beste ^^
- Die Position der Figur stimmt nie, nur annähernd (das Problem hast du immer nur unterschiedlich stark ausgeprägt
- Die Bewegung wird nicht so schön in Kurven aussehen, als es mit Splines der Fall wäre (wolltest du ja auch nicht)

14

29.09.2009, 19:07

Also im Klartext

Tastenabfangen dann darüber Figur bewegen dabei entsteht ja eine neue Position und wie berechne ich den Richtungsvektor ?

Und dann schick ich das an alle Clienten ?

15

29.09.2009, 19:37

Richtungsvektor = Punkt 2 - Punkt 1

Normalisierter Vektor = Vektor / Betrag des Vektors


Wenn du es cheatsicher haben willst, dann schickst du das Komando an den Server, dieser berechnet Position + Richtung und schickt es dann an alle Clients

16

29.09.2009, 23:30

Zitat von »"chriss"«

Wenn du es cheatsicher haben willst, dann schickst du das Komando an den Server, dieser berechnet Position + Richtung und schickt es dann an alle Clients

Was nichts gegen Aimbots und Wallhacks hilft.

Aber natürlich ist es eine Grundlage, allem was der Client macht zu misstrauen.
Also, wenn alle wichtigen Entscheidungen vom Server getroffen werden, hat man weniger Probleme mit Schummlern und das Spiel läuft eher synchron.
Lieber dumm fragen, als dumm bleiben!

17

30.09.2009, 15:19

Na momentan lass ich die Berechnung vom Clienten bestimmen ..

Also ist das nicht so eine gute Lösung ?

Weil wenn ich so überlege wegen Manipulation..

18

30.09.2009, 15:45

Das Problem sind erstmal die Ungenauigkeiten, die auftreten können.
Du musst auf jeden Fall immer mal wieder absolute Werte von sämtlichen relevanten Objekten zu allen PCs senden. Wenn die Spiele z.b. mit unterschiedlicher Framerate laufen, treten ruck zuck irgendwelche Ungenauigkeiten auf (frühere oder spätere Kollision, ein paar Pixel weiter links oder rechts) die sich dann immer weiter aufbauen, bis hinterher auf jedem PC eine andere Version vom Spiel läuft.
Dass der Server dann alle Spielrelevanten Berechnungen ausführt schützt dann auch schon ein Stück weit gegen Betrüger. Daneben sollten aber auch die Clienten ihre Berechnungen ausführen und die als Zwischenwerte nehmen, wenn der Server nicht andauernd alles sendet (um Traffic zu sparen). Diese Zwischenwerte werden dann von neuen, die vom Server kommen immer überschrieben.
Lieber dumm fragen, als dumm bleiben!

19

30.09.2009, 16:16

Also ich muss mir das mit den Bewegungssquenzen nochmal komplett neu durchdenken ..

Da ich ja auch eine Charakteranimation dabei habe es ist ja nicht nur das stupide Koordinaten verändern ;)

Und dann hab ich ja noch Map-Scrolling mit drinne und muss sowieso schauen wegen Map- und Spielerkoordinaten..

Aber danke erstmal soweit ;)

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

20

30.09.2009, 16:39

Zitat von »"xenus"«

Da ich ja auch eine Charakteranimation dabei habe es ist ja nicht nur das stupide Koordinaten verändern ;)


animationen wie laufen/gehen etc. müssen nicht synchron sein. das kannst du auch client-seitig berechnen. auch um einiges schneller als auf dem server ( wegen gpu skinning etc. )
"Don't trust your eyes: They are a hell of a lot smarter than you are"

Werbeanzeige