PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kein eindeutiger Winkel



Cornix
06.09.2010, 19:28
Guten Abend. Erneut habe ich ein kleines Problem mit dem RPG-Maker XP und erneut wende ich mich an die hilfreichen Leute welche mir schon zahlreich beiseite standen.

Ich habe nun schon seit langen Stunden versucht dieses Problem zu lösen doch derzeit noch ohne Erfolg.

Ich will ein Sprite rotieren lassen, und zwar von seinem Ursprungspunkt in die Richtung eines anderen Objektes.
Um den Winkel zwischen dem Ursprung und dem Ziel zu erhalten benutze ich folgende Code-Zeilen:


x = @s.x - @p.x
y = @s.y - @p.y

a = Math.atan2(y,x) * 57.295779513082Dies liefert den Winkel zwischen dem Sprite @s und dem Ziel @p in Grad.

Nun habe ich versucht das Sprite mithilfe folgender Zeile rotieren zu lassen:

@s.angle = aIch musste allerdings kläglicherweise feststellen, dass dies nicht das erwünschte Ergebniss geliefert hat.

Nach einigem Hin und Her und verschiedenen Experimenten habe ich folgendes erkannt:
Die erste Funktion liefert mir die Angaben in folgendem Muster:
Osten 0°
Norden 90°
Westen 180°
Süden 270°

Die zweite Funktion setzt die Ausrichtung wie folgt:
Süden 0°
Westen 90°
Norden 180°
Osten 270°

Das Problem ist, nichtnur, dass der Ursprung voneinander abweicht, auch die Richtung in welche addiert beziehungsweise subtrahiert wird ist umgekehrt.
Im Kreis dargestellt:
Erste Funktion:


90
45 135
0 180
315 225
270
Zweite Funktion:


180
225 135
270 90
315 45
0
Wie genau soll ich die beiden Werte umrechnen damit sie übereinstimmen? Eine einfach Addition eines Fixwertes ist leider nicht möglich und ich möchte es gerne für 360° funktionsfähig haben.

P.S.: Sollte ich derlei Fragen vielleicht in einem anderen Teil des Forums stellen? Ich dachte an das "Programmierung" Forum, allerdings handelt es sich hierbei doch um Fragen bezüglich des RMXP und dessen eingebauten Funktionen.

Ich bedanke mich für eure Hilfe schoneinmal im Vorraus.

-KD-
07.09.2010, 00:05
Da die Richtung in der zweiten Funktion umgedreht ist, musst du den Winkel mal -1 nehmen. Außerdem ist sie ja um 90° verschoben, also musst du noch mit 90 subtrahieren. Damit das ganze im Bereich [0, 360] bleibt führst du noch eine Modulo-Operation mit 360 aus.

x = @s.x - @p.x
y = @s.y - @p.y
a = Math.atan2(y,x) * 57.295779513082
@s.angle = -(a+90) % 360

btw. was ist das für eine merkwürdige Zahl? 57.29...?

Edit: Achso, 360 / 2*Math::PI.

Cornix
07.09.2010, 21:45
Vielen Dank, hat wundervoll funktioniert. Allerdings brauchte man keine Modulo-Operation durch zu führen da dies von der Funktion automatisch berichtigt wird.

Um ehrlich zu sein ist mir die Möglichkeit besagte Ausgabe mit -1 zu multiplizieren selbst bereits in Erwegung gekommen, nichts desto trotz ein sehr hilfreicher Beitrag.