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
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 !