Linie zeichnen/berechnen zwischen zwei punkten
Verfasst: 05.10.2012 22:51
Hi PBler.
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:
Alternative über den Faktor:
HELP!
Ein Beispiel wäre das Bewegen eines Projektils vom Abschußpunkt zum Zielpunkt. (nur nochmal zur Erklärung)
Danke vorab.
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
EndIfHELP!
Ein Beispiel wäre das Bewegen eines Projektils vom Abschußpunkt zum Zielpunkt. (nur nochmal zur Erklärung)
Danke vorab.