Schwerkraft


Stephan Zesiger

Erfahrenes Mitglied
Hi Folks,

ich bräuchte wieder mal Hilfe. Also, ich habe ein Objekt, mit 2 Variablen, die einmal die Richtung (in Grad) und die Anfangsgeschwindigkeit des Objekts angeben. Wie sieht das AS aus, mit dem ich die Flugbahn dieses Objekts berechnen kann.

MfG
Killkrog
ja...mit diesem thread hat eigentlich die ganze geschichte angefangen. seit kanpp 3 wochen hängt dieser thread hier im forum ganz oben. es hat sich gezeigt, dass das interesse an mathe, in flash praktisch angewandt, gross ist.

To make a long story short: reina hat sich der sache angenommen undhier mit einem sagen wir mal workshop zum thema schwerkraft begonnen.


dieser thread wird in diesem hier fortgesetzt und soll sich ausschliesslich dem thema schwerkraft widmen. natürlich sollen weitere folgen (elastizität, kurvenbewegungen, was auch immer).

genug der worte; let's work it out!



skyla

;)
 
Zuletzt bearbeitet:

Stephan Zesiger

Erfahrenes Mitglied
Ok here we go !

Kleines Preview:

a.angucken

b. was machen wir: wir gehen von einem ausgangsmodell aus, indem sich ein ball von links nach rechts bewegt. dort angelangt, werden wir das ganze 2-dimensional machen (veränderung der y-achse) und anschlissend auf diesem vorgang die gesetzte der physik anwenden (grosse worte, für jemand, der eine 5 in mathe hatte-egal).


ausgangsmodell:


PHP:
        this._x+=xspeed;;

	if (this._x+ this._width/2>rechts){
		this._x=rechts-this._width/2;
		xspeed=-xspeed;
	}
	if (this._x-this._width/2<links){
		this._x=links+this._width/2;
		xspeed=-xspeed;
	}
so. natürlich bewegt sich hier noch nichts. es fehlt noch das onEnterFrame. das kommt dann am ende im prototype. this ist der platzhalter für die id der kugel (wegen dem prototypen). xspeed ist die geschwindigkeit. links/rechts ist der bühnenrand. hier soll der ball die richtung wechseln (-speed). die hälfte des balles nehme ich, weil der ball von seinem zentrum aus berechnet wird.

so jetzt zur y-achse:

PHP:
this._y+=yspeed;
	if (this._y+this._height/2>unten){
		this._y=unten-this._height/2;
		yspeed=-yspeed*bounce;
	}
	if (this._y-this._height/2<oben){
		this._y=oben+this._height/2;
		yspeed=-yspeed;
	}
zack! fertig der ball fetzt quer über die bühne. jetzt kommts:

1. die schwerkraft: wo wirkt sie sich aus ? richtig: auf die yspeed bewegung. wird dieser wert höher, sinkt die kugel nach unten, der wert von yspeed steigt an.


yspeed=yspeed+schwerkraft


ein realistischer wert ist 2. Thats's it ! so easy, unglaublich. und ich hab immer gedacht, zu sowas braucht man ein mathestudium. pustekuchen :p

2. der luftwiederstand: unsere kugel schwebt ja nicht im all, sie muss langsamer werden. wo muss geschraubt werden ? jawoll wieder am speed.


yspeed=yspeed*reibung+schwerkraft
xspeed=xspeed*reibung+schwerkraft


ein sympathischer wert liegt knapp unter 1 (1 wäre reibung=0) also zB 0.98

3. zu guter letzt soll die kugel noch bouncen. und jetzt wird's exterm schwierig: wo wirkt es sich aus ? beim richtungswechsel natürlich.

PHP:
xspeed=-xspeed*bounce;
yspeed=-yspeed*bounce;
holz hätte etwa 0.3. ne gummikugel 0.95. 1 wäre wieder zero-bounce.


so fertig! jetzt packen wir das ganze noch in einen prototypen, damit jeder mc daran glauben darf. aber hier fängt jetzt der code an, der auch in der fla steht.

wichtig: folgende variablen müssen vorher initialisert werden:
PHP:
rechts=stage.width;
links=0;
oben=0;
unten=stage.height;
und jetzt das baby:
PHP:
MovieClip.prototype.schwerkraft=function(xspeed,yspeed,reibung,schwerkraft,bounce){
	this.onEnterFrame=function(){
	this._x+=xspeed;;
	if (this._x+ this._width/2>rechts){
		this._x=rechts-this._width/2;
		xspeed=-xspeed*bounce;
	}
	if (this._x-this._width/2<links){
		this._x=links+this._width/2;
		xspeed=-xspeed;
	}
	this._y+=yspeed;
	if (this._y+this._height/2>unten){
		this._y=unten-this._height/2;
		yspeed=-yspeed*bounce;
	}
	if (this._y-this._height/2<oben){
		this._y=oben+this._height/2;
		yspeed=-yspeed;
	}
	yspeed=yspeed*reibung+schwerkraft;
	xspeed=xspeed*reibung
	if (this.xspeed==0){
		delete this.onEnterFrame;
	}
	}
}

mc mit id kugel auf die bühne und ab geht die post:

PHP:
kugel.schwerkraft(Math.random()*60-30,Math.random()*60-30,0.99,2,0.9)

hasta la vista !

so das war hoffentlich der zweite beitrag zu vielen weiteren in unserer neuen reihe 'flash and physics' !

c ya and enjoy the weekend !
 

Anhänge

Zuletzt bearbeitet:

Adam Wille

Erfahrenes Mitglied
Zwar imho von der Idee her dem Beispiel von reima ziemlich nahe, aber dennoch klasse erklärt und mit ein wenig Einarbeitung und auch einigermaßen vorhandenen Vorkenntnissen in Sachen Flash lässt sich das wirklich gut nachvollziehen, warum was erfolgt. :)

Für Leute, die sich für realistisches Verhalten von MovieClips, wenn bis jetzt auch nur in der zweiten Ebene, interessieren ein schöner Einstieg, falls sie's selbst noch nicht versucht haben, sich hinter den Kulissen ein wenig umzuschauen. :)

Kompliment - ich hoffe, dass der ein oder andere sich mit meiner Meinung identifizieren kann.
Wenn nicht, wäre es trotzdem schön zu wissen, ich denke mal auch nicht nur von meiner Seite her, sondern garantiert auch Skyla's, wenn ihr eure Meinungen hierzu mal posten könntet...paar Zeilen feedback schaden vom Tippaufwand her keinem und Aufwand kann man ruhig honorieren... ;)

Geist,
etwas enttäuscht von eurer Zurückhaltung...