@Foaly:
Also wenn du nur jeweils einen Winkel für die Diagonalrichtungen hast - also die Bewegungsrichtungen in 45° Schritte unterteilt sind (siehe unten) - dann brauchst du nicht mal Trigonometrie.
Nur 8 Richtungen:
|
Quellcode
|
1
2
3
|
\ | /
--- ---
/ | \
|
Wenn wir davon ausgehen, dass du einen 2D Vektor hast (oder einfach ausgedrückt einen x- & y-Wert) für die Bewegungsrichtung, und du dann diesen einfach mit der Geschwindigkeit und der FrameTime multiplizierst um auf die tatsächliche Verschiebung zu kommen, dann musst du einfach immer dafür sorgen, dass die Länge des Vektors in jede Richtung gleich 1 ist.
Wenn du jetzt z.B. eine Bewegung nach
rechts hast ist das denkbar einfach: (1|0) x-Wert also 1 und y-Wert 0. Jetzt kanst du beide Werte mit Geschwindigkeit und FrameTime multiplizieren und kommst auf eine reine Bewegung nach rechts.
Wenn du dich aber jetzt nach
rechts-oben bewegen willst, dann wäre es falsch diesen Vektor zu nehmen: (1|1) - denn die Länge dieses Vektors ist ja (Pythagors)
§sqrt{2} § und das ist mit ~1,414 ein gutes Stück mehr als 1 und somit multiplizierst du Geschwindigkeit und FrameTime nicht mehr mit 1 sondern mit etwas mehr als 1. -> Die Bewegung wird schneller.
Lösung: Der Pythagoras aus dem x- & y-Wert muss gleich 1 sein. Da wir ja eine Bewegung mit genau 45° haben (sozusagen eine Winkelhalbierende zwischen der Vertikalen und der Horizontalen gilt, dass x- & y-Wert beide gleich sind. x = y ->
§1 = sqrt{x^{2}+x^{2}} §
Also
§x = sqrt{ \frac {1}{2}}§ -> Richtungsvektor: (
§sqrt{ \frac {1}{2}§ |
§sqrt{ \frac {1}{2}§ ).
Für die anderen Richtungen ändert sich natürlich nur entsprechend das Vorzeichen.
Hoffe das ist nicht zu kompliziert geworden!? :lol:
Gruß
SaRu_