sancho
Erfahrenes Mitglied
Gavitationsbewegungen (MX)
Hi all..
Mit diesem Script könnt ihr eine realistische Bewegung erzeugen, die ein Objekt auf ein bestimmtes Ziel lenkt.
Physik: Gravitation im Allgemeinen (eine Masse zieht die Andere an)
Als allererstes muss man einen mc auf der bühne erstellen der später bewegt wird.
Dann brauchen wir zwei Massen der Objekte die sich anziehen, also 2 Variablen. Desweiteren brauchen wir die Gravitationskonstante Gamma und eine Zeiteinheit. Zusätzlich wird ein Maßstab eingeführt, den wir brauchen damit ein Pixel nicht unbedingt einem Meter entspricht(praktisch wenn man zum Bsp. die Anziehungskraft zweier Planeten vorführen will, da die Dimensionen im Weltraum doch etwas größer sind, als die Bühne breit ist).
dann setzen wir wir noch einen Startpunkt für den zu bewegenden mc fest, und die Koordinaten des Ziels:
Und jetzt kommt einiges an Mathematik und Physik
:
Erklärungen
(1,2): Die Entfernung zwischen dem Objekt und dem Ziel in x- und y-Richtung ausrechenen.
(3): Mit dem Satz des Pythagoras den Abstand (absolute Entfernung zweier Punkte) ausrechnen.
(4): Da wir den Abstand der Zwei Massen wissen können wir die phys. Formel für die Gravitation anwenden, und so die anziehungskraft bei dieser Entfernung ausrechen.
(5+6): Um die Kraft wieder in x- und y-Richtung splitten zu können brauchen wir Winkelbeziehungen(Sinus und Cosinus). Alpha ist der Winkel der zwischen dem Abstand und der x-Richtung bei der zu verschiebenden Masse liegt. Ab jetzt muss man also jede Berechnung wieder in jeweils der x- und y-Richtung vornehmen
(7+8): Kraft in die x- und y-Komponenten splitten
(9+10): Beschleunigung (a), die bei der derzeitigen Entfernung zum ziel entsteht, ausrechnen mit der Formel: Beschleunigung ist gleich Kraft pro Masse
(11+12): Die zur Beschleunigung gehörende Geschwindigkeit ermitteln
(13+14): Mit 'Geschwindigkeit mal Zeit' die zurückgelegte Strecke um den Teil erhöhen die das Objekt in diesem Frame und bei dieser Beschleunigung zurücklegt.
(15+16+17): Wenn das zu Bewegende Objekt nicht einen bestimmten Abstand zum Ziel unterschreitet, dann wird die Strecke die bei (13) und (14) ermittelt wurde zum Startpunkt dazuaddiert und so die neue Koordinate festgelegt. Dadurch ensteht Frame für Frame eine Bewegungsanimation.
Script:
Der Physikteil es Scriptes muss jetzt noch in einen onEnterFrame Eventhandler der sich auf den zu bewegenden mc bezieht, die Variablendeklarationen brauchen keinen. Je nachdem was man vor hat kann man das Objekt auch noch 'dragable' machen und dann kommt zB noch eine if abfrage vor das script die überprüft ob man das Objekt gerade zieht. Sonst klappt das aber auch selbstständig.
Also viel Spaß damit.. *sancho*
Hi all..
Mit diesem Script könnt ihr eine realistische Bewegung erzeugen, die ein Objekt auf ein bestimmtes Ziel lenkt.
Physik: Gravitation im Allgemeinen (eine Masse zieht die Andere an)
Als allererstes muss man einen mc auf der bühne erstellen der später bewegt wird.
Dann brauchen wir zwei Massen der Objekte die sich anziehen, also 2 Variablen. Desweiteren brauchen wir die Gravitationskonstante Gamma und eine Zeiteinheit. Zusätzlich wird ein Maßstab eingeführt, den wir brauchen damit ein Pixel nicht unbedingt einem Meter entspricht(praktisch wenn man zum Bsp. die Anziehungskraft zweier Planeten vorführen will, da die Dimensionen im Weltraum doch etwas größer sind, als die Bühne breit ist).
PHP:
m1 = beliebiges gewicht
m2 = beliebiges gewicht
gamma = 0.00000000006672
t = 1/Fps //bei realistischen bewegungen 1/Fps (für zeitraffer etc. hiermit etwas rumspielen)
skala = maßstab den ihr setzen wollt
dann setzen wir wir noch einen Startpunkt für den zu bewegenden mc fest, und die Koordinaten des Ziels:
PHP:
startx = x-koordinate an der der mc starten soll
starty = y-koordinate an der der mc starten soll
zielx = x-koordinate auf die der mc zusteuern soll
ziely = y-koordinate auf die der mc zusteuern soll
Und jetzt kommt einiges an Mathematik und Physik

PHP:
dx = (zielx - this._x)*skala //(1)
dy = (ziely - this._y)*skala //(2)
abstand = Math.sqrt(dx*dx + dy*dy) //(3)
F = (gamma * m1 * m2) / (abstand * abstand) //(4)
sinalpha = dy / abstand //(5)
cosalpha = dx / abstand //(6)
fx = cosalpha * F //(7)
fy = sinalpha * F //(8)
ax = fx / m1 //(9)
ay = fy / m1 //(10)
vx = ax * t //(11)
vy = ay * t //(12)
sx += vx * t //(13)
sy += vy * t //(14)
if(abstand > 'irgend-ein-wert' * skala) { //(15)
this._x = startx + sx //(16)
this._y = starty + sy //(17)
}
Erklärungen
(1,2): Die Entfernung zwischen dem Objekt und dem Ziel in x- und y-Richtung ausrechenen.
(3): Mit dem Satz des Pythagoras den Abstand (absolute Entfernung zweier Punkte) ausrechnen.
(4): Da wir den Abstand der Zwei Massen wissen können wir die phys. Formel für die Gravitation anwenden, und so die anziehungskraft bei dieser Entfernung ausrechen.
(5+6): Um die Kraft wieder in x- und y-Richtung splitten zu können brauchen wir Winkelbeziehungen(Sinus und Cosinus). Alpha ist der Winkel der zwischen dem Abstand und der x-Richtung bei der zu verschiebenden Masse liegt. Ab jetzt muss man also jede Berechnung wieder in jeweils der x- und y-Richtung vornehmen
(7+8): Kraft in die x- und y-Komponenten splitten
(9+10): Beschleunigung (a), die bei der derzeitigen Entfernung zum ziel entsteht, ausrechnen mit der Formel: Beschleunigung ist gleich Kraft pro Masse
(11+12): Die zur Beschleunigung gehörende Geschwindigkeit ermitteln
(13+14): Mit 'Geschwindigkeit mal Zeit' die zurückgelegte Strecke um den Teil erhöhen die das Objekt in diesem Frame und bei dieser Beschleunigung zurücklegt.
(15+16+17): Wenn das zu Bewegende Objekt nicht einen bestimmten Abstand zum Ziel unterschreitet, dann wird die Strecke die bei (13) und (14) ermittelt wurde zum Startpunkt dazuaddiert und so die neue Koordinate festgelegt. Dadurch ensteht Frame für Frame eine Bewegungsanimation.
Script:
Der Physikteil es Scriptes muss jetzt noch in einen onEnterFrame Eventhandler der sich auf den zu bewegenden mc bezieht, die Variablendeklarationen brauchen keinen. Je nachdem was man vor hat kann man das Objekt auch noch 'dragable' machen und dann kommt zB noch eine if abfrage vor das script die überprüft ob man das Objekt gerade zieht. Sonst klappt das aber auch selbstständig.
Also viel Spaß damit.. *sancho*
Zuletzt bearbeitet: