Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „_rotation mit Math.atan2“

S

Steve_Ly-Ling

Guest

Ich habe vor eine größere Physikengine zu programmieren. Ich wollte das aber statt in anderen Sprachen mal in ActionScript 2.0 versuchen.
Bei der ersten kleinen Testengine drängt sich mir aber ein Problem auf.

Kurz gesagt, ich will, dass einem Objekt _rotation über einen Winkel der mit Math.atan2 berechnet wird zuweisen. Dann will ich das dieser Winkel in einer Variable gespeichert wird. Nun soll geprüft werden Ob sich eine Wand in der nähe befindet... Und nun kommt mein Problem... wenn ja soll geprüft werden in welchem Winkel sie zu dem objekt steht. Wenn das Objekt die Wand berührt wird von der Geschwindigkeit des Objektes je nach Winkel bis zu 100% abgezogen werden, die Geschwindigkeit umgedreht und die Kugel fliegt entgegengesetz dem Aufprallwinkel weiter.

Beispiel:

Der hitTest wird ausgelößt wenn die Kugel im Winkel von 45° auf die Wand kommt, dann sollen etwa 25% von der geschwinddigkeit abgezogen werden und die Kugel soll mit -45° weiter fliegen.

PS: Die Wand muss nicht gerade stehen, es kann auch eine Decke sein.
 
S

Steve_Ly-Ling

Guest

Na ja, ...

Falls jemand davon ein bisschen Ahnung hat kann er ja mal helfen, ich weis halt nicht genau was für Sachen man in ActionScript dafür bringen muss.
Daher wäre es schon nett wenn dieser jemand einen Script schreibt, in meiner hochgelobten Hilfe finde ich nämlich nichts.
 

h_seldon

Aktives Mitglied

Hallo,

schau mal in den Source code von physic engines rein, z.B. flade. Eine schöne (allerdings nicht ganz fehlerfreie) Lösung stammt von Keith Peters:

var vx = 0;
var vy = 0;
var gravity = .5;
var bounce = -0.7;
var oldX;
var oldY;
ball.onEnterFrame = function() {
vy += gravity;
this._x += vx;
this._y += vy;
for (var i = 0; i<5; i++) {
checkLine(linie);
}
};
function checkLine(line) {
var bounds = line.getBounds(this);
if (ball._x>bounds.xMin && ball._x<bounds.xMax) {
// get angle, sine and cosine
var angle = line._rotation*Math.PI/180;
var cosine = Math.cos(angle);
var sine = Math.sin(angle);
// get position of ball, relative to line
var x = ball._x-line._x;
var y = ball._y-line._y;
// rotate line
var y1 = cosine*y-sine*x;
var vy1 = cosine*vy-sine*vx;
if (y1>-ball._height/2 && y1<vy1) {
// rotate line
var x1 = cosine*x+sine*y;
// rotate velocity
var vx1 = cosine*vx+sine*vy;
// perform bounce with rotated values
y1 = -ball._height/2;
vy1 *= bounce;
// rotate everything back
x = cosine*x1-sine*y1;
y = cosine*y1+sine*x1;
vx = cosine*vx1-sine*vy1;
vy = cosine*vy1+sine*vx1;
// reset actual ball position
ball._x = line._x+x;
ball._y = line._y+y;
}
}
}

(ist ein bißchen gekürzt). ball ist ein MovieClip, der von oben auf eine um 45 Grad geneigte Linie namens - Überraschung! - linie fällt.

[wühl,wühl,raschel] Soeben halte ich in zittrigen, schweißnassen Händen die Bibel, den Koran, das Buch der Physik-in-Flash-Bücher: Keith Peters, Foundation Actionscript Animation, friendsofed 2006, frisch, gerade aus der Folie gepellt, und ich bin für die nächsten zwei Wochen nicht mehr ansprechbar, bis ich jeden Satz auswendig kenne! Die zugehörigen flas finden sich unter www.friendsofed.com, Flashbücher, downloads, darunter auch obiger Code (ch10_08.fla). Überhaupt ist friendsofed eine erfrischende Quelle wunderbarer Flashinspiration (das war doch jetzt wahrhaft poetisch, oder?): Flash Math Creativity, New Masters of Flash etc. mit nicht immer einfach nachvollziehbaren, aber immer phantastischen Beispielen. Und wer jetzt auf den Geschmack gekommen ist, der möge beispielsweise mal bei http://www.levitated.net/daily/indexDay.html vorbeischauen, oder bei andre michelle, oder ...

Viel Spaß
 
S

Steve_Ly-Ling

Guest

Kann leider erst heute antworten ...

Kann leider erst heute antworten:
Super, das muss ich sofort ausprobieren.
Gestern abend habe ich allerdings das Probelem mit Einfallswinkel = Ausfallswinkel selber gelößt. Man muss eigendlich nur mit so einer Art Kräftedreieck arbeiten.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Statistik des Forums

Themen
175.188
Beiträge
2.582.069
Mitglieder
67.257
Neuestes Mitglied
Can Ergin
Oben