Scripte - so oder besser anders?
Übersicht
BlitzMax, BlitzMax NG
Beginners-Corner
|
|
Sa, Mai 07, 2011 22:24
Antworten mit Zitat
|
Hey mpmxyz.
Habe mir deinen Code mal angeschaut und dann passend für meinen umgeschrieben.
Habe auch schon direkt was dran verändert: Man kann jetzt über einen weiteren Parameter bestimmen, ob rechts oder links an dem Punkt vorbeigeflogen werden soll, da es mich einfach gestört hat, dass grundsätzlich nur Rechtskurven geflogen wurden.
Ich muss auch ehrlich sagen, dass mich die ganze Rechnerei dahinter so interessiert hat, dass ich mir das ganze auf ein Koordinatensystem gezeichnet habe und ungefähr 3 - 4 Durchgänge gerechnet und habe dann gesehen, wie sich der Kreis andeutet.
Wenn ich jetzt den Code mit deiner Beschreibung verlgeiche, dann sehe ich auch, was wozu gehört und jetzt habe ich es auch verstanden, bis auf die Mathematik, die hinter der Winkel Sache steht.
Hier ist jetzt der Code, den ich für die Bewegung benutze, damit du siehst, dass ich mir selbst nochmal Gedanken drüber gemacht habe und es nicht einfach kopiert habe:
BlitzMax: [AUSKLAPPEN] [EINKLAPPEN] If bTurning Then pVecPosition.Set_X(pVecPosition.Get_X() - v2dReferencePoint.Get_X()) pVecPosition.Set_y(pVecPosition.Get_y() - v2dReferencePoint.Get_y()) Local v2dOldPos:TVector2D = TVector2d.Create(pVecPosition.Get_X(), pVecPosition.Get_Y()) Local fRadius:Float = Sqr(pVecPosition.Get_X() * pVecPosition.Get_X() + pVecPosition.Get_Y() * pVecPosition.Get_Y()) Local fAverageSpeed:Float = 0.5 * (pVecSpeed.Get_X() + pVecSpeed.Get_Y()) Local fAngularSpeed:Float = (fAverageSpeed / fRadius) * 180.0 / Pi If iaParameterList[2] = 0 Then pVecPosition.Set_X(Cos(fAngularSpeed) * v2dOldPos.Get_X() - Sin(fAngularSpeed) * v2dOldPos.Get_Y()) pVecPosition.Set_Y(Cos(fAngularSpeed) * v2dOldPos.Get_Y() + Sin(fAngularSpeed) * v2dOldPos.Get_X()) ElseIf iaParameterList[2] = 1 Then pVecPosition.Set_X(Cos(fAngularSpeed) * v2dOldPos.Get_X() + Sin(fAngularSpeed) * v2dOldPos.Get_Y()) pVecPosition.Set_Y(Cos(fAngularSpeed) * v2dOldPos.Get_Y() - Sin(fAngularSpeed) * v2dOldPos.Get_X()) EndIf Return TVector2D.Create(pVecPosition.Get_X() + v2dReferencePoint.Get_X(), pVecPosition.Get_y() + v2dReferencePoint.Get_y()) Else v2dReferencePoint = TVector2D.Create(pVecPosition.Get_X() + iaParameterList[0], pVecPosition.Get_Y() + iaParameterList[1]) bTurning = True pVecPosition.Set_X(pVecPosition.Get_X() - v2dReferencePoint.Get_X()) pVecPosition.Set_y(pVecPosition.Get_y() - v2dReferencePoint.Get_y()) Local v2dOldPos:TVector2D = TVector2d.Create(pVecPosition.Get_X(), pVecPosition.Get_Y()) Local fRadius:Float = Sqr(pVecPosition.Get_X() * pVecPosition.Get_X() + pVecPosition.Get_Y() * pVecPosition.Get_Y()) Local fAverageSpeed:Float = 0.5 * (pVecSpeed.Get_X() + pVecSpeed.Get_Y()) Local fAngularSpeed:Float = (fAverageSpeed / fRadius) * 180.0 / Pi If iaParameterList[2] = 0 Then pVecPosition.Set_X(Cos(fAngularSpeed) * v2dOldPos.Get_X() - Sin(fAngularSpeed) * v2dOldPos.Get_Y()) pVecPosition.Set_Y(Cos(fAngularSpeed) * v2dOldPos.Get_Y() + Sin(fAngularSpeed) * v2dOldPos.Get_X()) ElseIf iaParameterList[2] = 1 Then Linksrum drehen pVecPosition.Set_X(Cos(fAngularSpeed) * v2dOldPos.Get_X() + Sin(fAngularSpeed) * v2dOldPos.Get_Y()) pVecPosition.Set_Y(Cos(fAngularSpeed) * v2dOldPos.Get_Y() - Sin(fAngularSpeed) * v2dOldPos.Get_X()) EndIf
Return TVector2D.Create(pVecPosition.Get_X() + v2dReferencePoint.Get_X(), pVecPosition.Get_y() + v2dReferencePoint.Get_y()) EndIf
Vielen Dank für die zahlreichen Erklärungen.
Lg, M0rgenstern
|
|
Übersicht
BlitzMax, BlitzMax NG
Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group