Trotz ausgiebiger Suche hier im Board sitz ich schon seit Stunden dran... oder ich stehe auf dem Schlauch oder bin schlicht zu doof...
Für ein Mini-Game möchte ich ein Sprite von Punkt A (x,y) nach Punkt B (x,y) bewegen. Ich hab sogar den Winkel dazu.
Dennoch war es mir bisher nicht möglich den Sprite von A nach B sauber zu bewegen.
Ich habe es über die Berchnung eines differenzierten Faktors für die Steigung X und Steigung Y versucht. Ich habe aus dem winkel über Cos() X berechnen lassen und über Sin() Y berchnen lassen für den Flug. Alles nix. Und jetzt seh ich vor läuter Bäume den Wald nicht mehr...
Hier ein paar snippets:
Code: Alles auswählen
Procedure.f Angle(x.f,y.f)
Protected Angle.f
Angle = ATan(y/x)
If x < 0 : Angle + #PI : EndIf
If x = 0 And y = 0 : Angle = 0 : EndIf
ProcedureReturn Angle*180/#PI
EndProcedure
Code: Alles auswählen
; calculate angle
\Angle = Angle(\PosX - \MoveToX, \PosY - \MoveToY)
; Move the unit
If \MoveToX < \PosX
\PosX - Cos(\Angle) * \Speed / 100
Else
\PosX + Cos(\Angle) * \Speed / 100
EndIf
If \MoveToY < \PosY
\PosY - Sin(\Angle) * \Speed / 100
Else
\PosY + Sin(\Angle) * \Speed / 100
EndIf
Alternative über den Faktor:
Code: Alles auswählen
...
x = Abs(\MoveToX - \PosX)
y = Abs(\MoveToY - \PosY)
\MoveToXFactor = Abs(x / y)
\MoveToYFactor = Abs(y / x)
...
; calculate angle
\Angle = Angle(\PosX - \MoveToX, \PosY - \MoveToY)
; Move the unit
If \MoveToX < \PosX
;\PosX - Abs(Sin(\angle)) * \Speed
\PosX - \MoveToXFactor
Else
;\PosX + Abs(Sin(\angle)) * \Speed
\PosY + \MoveToXFactor
EndIf
If \MoveToY < \PosY
; \PosY - Abs(Cos(\Angle)) * \Speed
\PosY - \MoveToYFactor
Else
; \PosY + Abs(Cos(\Angle)) * \Speed
\PosY + \MoveToYFactor
EndIf
HELP!
Ein Beispiel wäre das Bewegen eines Projektils vom Abschußpunkt zum Zielpunkt. (nur nochmal zur Erklärung)
Danke vorab.