Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 06-08-2003, 13:20   #1 (permalink)
Steffen G.
 
Benutzerbild von Tschdaeff
 
Registriert seit: Aug 2001
Ort: Ba-Wü
Beiträge: 4.123
[Physik] Wurfparabel

Hi ich hab grad mal in meine Formelsammlung geschaut und nen script zur wurfParabel gemacht.... vielleciht kanns ja jemand brauchen.... einfach ins erste Frame und noch nen movieclip mit dem instanz namen "mc" machen.

ActionScript:
  1. mc.x = mc._x
  2. mc.y = mc._y
  3. winkel = 15
  4. gesch = 30
  5. fall = 10
  6. _root.onMouseDown = function () {
  7.     this.mc.onEnterFrame = function () {
  8.         this._x += 5
  9.         this.xs = ((this._x-this.x)/5)+1
  10.         this.y = this.xs*Math.tan(winkel*Math.PI/180)-fall/(2*(gesch*gesch)*(Math.cos(winkel*Math.PI/180)*Math.cos(winkel*Math.PI/180)))*(this.xs*this.xs)
  11.     this.ys = this._y-this.y
  12.     this._y = this.ys
  13.     }   
  14. }


cu mfg
Tschdaeff
__________________
mod@
www.flashbattle.de
www.steffen-guse.de
------------------------------------

Tschdaeff ist offline   Mit Zitat antworten
Alt 06-08-2003, 13:46   #2 (permalink)
Steffen G.
 
Benutzerbild von Tschdaeff
 
Registriert seit: Aug 2001
Ort: Ba-Wü
Beiträge: 4.123
hmm funkt doch noch nicht ganz richtig wenn man z.b. nen winkel von 30° eingibt dann steigt der ball steiler hoch wie er sollte...

kennt sich jemand mit sowas aus?

hab ne version rangehängt da kann man bissel testen

cu mfg
Tschdaeff
Angehängte Dateien
Dateityp: zip physik.zip (5,9 KB, 55x aufgerufen)
__________________
mod@
www.flashbattle.de
www.steffen-guse.de
------------------------------------

Tschdaeff ist offline   Mit Zitat antworten
Alt 06-08-2003, 14:14   #3 (permalink)
_______________
 
Benutzerbild von son yu
 
Registriert seit: Mar 2003
Ort: !Schnitzerland
Beiträge: 2.003
hab erstmal kurz mir die swf angeschaut...

da fliegt der ball ja erst ne kurve nach oben, also bei 30 grad...

das haut natürlich nich hin, ich guck mal was man da machen kann...

wozu is symbol2 gut?

schöne grüße
__________________
ey… be cool!

Mac OS-X 10.5.6, Safari Version 4 Public Beta (5528.16), on PowerBook 12" G4 1,5 GHz,
1,25 GB RAM, FlashPlayer 9 is auch noch da, wenn ich Lust habe…
son yu ist offline   Mit Zitat antworten
Alt 06-08-2003, 15:26   #4 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
also hiervon bin ich nicht so begeistert:

ActionScript:
  1. this.y = this.xs*Math.tan(winkel*Math.PI/180)-fall/(2*(gesch*gesch)*(Math.cos(winkel*Math.PI/180)*Math.cos(winkel*Math.PI/180)))*(this.xs*this.xs)

ich glaube das macht man eher mit sowas:

vy(t) = vy0*t-g/2*t*t;

t = time
g = Schwerkraft
vy = Geschwindigkeit auf der Y-Achse
vy0 = Abwurfgeschwindigkeit (Y)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 06-08-2003, 15:36   #5 (permalink)
_______________
 
Benutzerbild von son yu
 
Registriert seit: Mar 2003
Ort: !Schnitzerland
Beiträge: 2.003
nich nur dir legts dabei die fußnägel hoch...

aber du hast da auch was vergesen

x = v0 * t * cos(a) // x in abhängigkeit zur zeit

y = -(g/2) * t² + v0 * t * sin(a) // y in abhängigkeit zur zeit

v0... anfangsgeschwindigkeit
t... zeit
a... der winkel alpha in grad
g... fallbeschleunigung


schöne grüße...
__________________
ey… be cool!

Mac OS-X 10.5.6, Safari Version 4 Public Beta (5528.16), on PowerBook 12" G4 1,5 GHz,
1,25 GB RAM, FlashPlayer 9 is auch noch da, wenn ich Lust habe…
son yu ist offline   Mit Zitat antworten
Alt 06-08-2003, 15:39   #6 (permalink)
Steffen G.
 
Benutzerbild von Tschdaeff
 
Registriert seit: Aug 2001
Ort: Ba-Wü
Beiträge: 4.123
hmm ich nehm nachher mal 2 rechnugen anstatt die eine

ich hab hier

y= x * tan alpha - g / (2*Vo²*cos²alpha)*x²

ich machs nachher in abhängigkeit von t


cu mfg
Tschdaeff
__________________
mod@
www.flashbattle.de
www.steffen-guse.de
------------------------------------

Tschdaeff ist offline   Mit Zitat antworten
Alt 06-08-2003, 15:45   #7 (permalink)
_______________
 
Benutzerbild von son yu
 
Registriert seit: Mar 2003
Ort: !Schnitzerland
Beiträge: 2.003
hier bitteschön...

einziges prob, funzt erst so recht mit der weite ab ner geschwindigkeit von 20...

is ja auch klar, sind ja so 20 pixel/sekunde und nicht 20 m/s

schöne grüße
Angehängte Dateien
Dateityp: zip physik.zip (5,1 KB, 94x aufgerufen)
__________________
ey… be cool!

Mac OS-X 10.5.6, Safari Version 4 Public Beta (5528.16), on PowerBook 12" G4 1,5 GHz,
1,25 GB RAM, FlashPlayer 9 is auch noch da, wenn ich Lust habe…
son yu ist offline   Mit Zitat antworten
Alt 06-08-2003, 20:10   #8 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
funst gut, dein Beispiel!

was hatte ich vergessen? Ich sehe nur, dass ich statt

sin(t)*v0

vy0 genommen habe.... aber sonst ist es das gleiche, oder?
Janoscharlipp ist offline   Mit Zitat antworten
Alt 06-08-2003, 23:35   #9 (permalink)
_______________
 
Benutzerbild von son yu
 
Registriert seit: Mar 2003
Ort: !Schnitzerland
Beiträge: 2.003
Zitat:
Geschrieben von Janoscharlipp

ich glaube das macht man eher mit sowas:

vy(t) = vy0*t-g/2*t*t;

t = time
g = Schwerkraft
vy = Geschwindigkeit auf der Y-Achse
vy0 = Abwurfgeschwindigkeit (Y)
also janosch
deine formel ist erstens der senkrechte wurf!

und zweitens vy ist nicht die geschwindigkeit auf der y-achse

sondern y zum zeitpunkt t

also physikbuch holen und nochmal nachlesen...

schöne grüße

ps: jetzt am grübeln für neue ideen is, formelsammlung sei dank
__________________
ey… be cool!

Mac OS-X 10.5.6, Safari Version 4 Public Beta (5528.16), on PowerBook 12" G4 1,5 GHz,
1,25 GB RAM, FlashPlayer 9 is auch noch da, wenn ich Lust habe…
son yu ist offline   Mit Zitat antworten
Alt 07-08-2003, 08:17   #10 (permalink)
-------------------------
 
Benutzerbild von Marpfei
 
Registriert seit: Jul 2002
Ort: Zürich
Beiträge: 159
Hi,
habe vor einiger Zeit auch ein bisschen in dem Bereich herumgespielt.
Vielleicht hilft euch dieses Skript. Es sind einfach zwei Klassen (Ball und Hintergrund).

Mit new Hintergrund (breite, höhe) erzeugt ihr einen Hintergrund eurer Wahl.
Mit addBall (Ballname, Durchmesser, Farbe, Dichte, Elastizität, Luftwiederstand, Tiefe des MCs)
könnt ihr einen eigenen Ball erzeugen.
Mit positionAllBalls () startet ihr die Animation, und die Bälle werden mit zufälliger Position
und Geschwindigkeit im Raum positioniert.

Ich habe versucht, das ganze so erweiterbar wie möglich zu machen.
Leider habe ich grad keinen Server, wo ich das Fla zur Verfügung stellen kann.

Hier mal nur in Code-Form....
ActionScript:
  1. MovieClip.prototype.ellipse = function (x, y, rx, ry, sgm) {
  2.     sgm = sgm == undefined ? 8 : sgm;
  3.     var periode = 2 * Math.PI;
  4.     var sgmAngle = periode / sgm;
  5.     var cRangle = sgmAngle / 2;
  6.     var cRx = rx / Math.cos (cRangle);
  7.     var cRy = ry / Math.cos (cRangle);
  8.     this.moveTo (x + rx, y);
  9.     for (var angle = sgmAngle; angle <= periode; angle += sgmAngle) {
  10.         var cX = x + Math.cos (angle - cRangle) * cRx;
  11.         var cY = y + Math.sin (angle - cRangle) * cRy;
  12.         var pX = x + Math.cos (angle) * rx;
  13.         var pY = y + Math.sin (angle) * ry;
  14.         this.curveTo (cX, cY, pX, pY);
  15.     }
  16. };
  17. MovieClip.prototype.kreis = function (x, y, r, sgm) {
  18.     this.ellipse (x, y, r, r, sgm);
  19. };
  20. MovieClip.prototype.rechteck = function (b, h, f) {
  21.     with (this) {
  22.         clear ();
  23.         moveTo (0, 0);
  24.         beginFill (f, 100);
  25.         lineStyle (0, 0x000000, 100);
  26.         lineTo (b, 0);
  27.         lineTo (b, h);
  28.         lineTo (0, h);
  29.         lineTo (0, 0);
  30.         endFill ();
  31.     }
  32. };
  33. //========================================
  34. function Ball (name, radius, colr, gravity, drag, bounce, depth, re, be) {
  35.     this.name = name;
  36.     this.radius = radius;
  37.     this.colr = colr;
  38.     this.xspeed;
  39.     this.yspeed;
  40.     this.gravity = gravity;
  41.     this.drag = drag;
  42.     this.bounce = bounce;
  43.     this.depth = depth;
  44.     this.dragging = false;
  45.     this.oldx = 0;
  46.     this.oldy = 0;
  47.     this.re = re;
  48.     this.be = be;
  49.     this.mc;
  50.     this.init ();
  51. }
  52. o = Ball.prototype;
  53. o.init = function () {
  54.     this.createMC ();
  55.     this.createBall ();
  56.     this.setSpeeds (Math.random () * 60 - 30, Math.random () * 60 - 30);
  57.     this.setEventhandler ();
  58. };
  59. o.setSpeeds = function (sx, sy) {
  60.     this.xspeed = sx;
  61.     this.yspeed = sy;
  62. };
  63. o.createMC = function () {
  64.     if (!_root.basis) {
  65.         _root.createEmptyMovieClip ("basis", 1);
  66.     }
  67.     this.mc = _root.basis.createEmptyMovieClip ("B_" + this.name, this.depth);
  68. };
  69. o.createBall = function () {
  70.     var e = this.mc;
  71.     with (e) {
  72.         e.beginFill (this.colr, 100);
  73.         e.kreis (0, 0, this.radius);
  74.         e.endFill ();
  75.     }
  76. };
  77. o.setBallPosition = function (px, py) {
  78.     this.mc._x = px;
  79.     this.mc._y = py;
  80. };
  81. o.getRadius = function () {
  82.     return this.radius;
  83. };
  84. o.move = function () {
  85.     var xs = this.xspeed;
  86.     var ys = this.yspeed;
  87.     var w2 = this.mc._width / 2;
  88.     var h2 = this.mc._height / 2;
  89.     var rie = this.re;
  90.     var lee = 0;
  91.     var toe = 0;
  92.     var boe = this.be;
  93.     var mc = this.mc;
  94.     if (!this.dragging) {
  95.         mc._x = mc._x + xs;
  96.         if (mc._x + w2 > rie) {
  97.             mc._x = rie - w2;
  98.             xs = -xs * this.bounce;
  99.         }
  100.         if (mc._x - w2 < lee) {
  101.             mc._x = lee + w2;
  102.             xs = -xs * this.bounce;
  103.         }
  104.         mc._y = mc._y + ys;
  105.         if (mc._y + h2 > boe) {
  106.             mc._y = boe - h2;
  107.             ys = -ys * this.bounce;
  108.         }
  109.         if (mc._y - h2 / 2 < toe) {
  110.             mc._y = toe + h2;
  111.             ys = -ys * this.bounce;
  112.         }
  113.         this.yspeed = this.oldy = ys * this.drag + this.gravity;
  114.         this.xspeed = this.oldx = xs * this.drag;
  115.     } else {
  116.         this.xspeed = mc._x - this.oldx;
  117.         this.yspeed = mc._y - this.oldy;
  118.         this.oldx = mc._x;
  119.         this.oldy = mc._y;
  120.     }
  121. };
  122. o.setEventhandler = function () {
  123.     var obj = this;
  124.     var b = this.mc;
  125.     b.onPress = function () {
  126.         this.startDrag ();
  127.         obj.dragging = true;
  128.     };
  129.     b.onRelease = function () {
  130.         this.stopDrag ();
  131.         obj.dragging = false;
  132.     };
  133.     b.onReleaseOutside = b.onRelease;
  134.     b.onMouseMove = function () {
  135.         var w = this._width / 2;
  136.         var h = this._height / 2;
  137.         if (obj.dragging) {
  138.             if (this._x > obj.re - w) {
  139.                 this._x = obj.re - w;
  140.             }
  141.             if (this._x < w) {
  142.                 this._x = w;
  143.             }
  144.             if (this._y > obj.be - h) {
  145.                 this._y = obj.be - h;
  146.             }
  147.             if (this._y < h) {
  148.                 this._y = h;
  149.             }
  150.         }
  151.     };
  152. };
  153. function Hintergrund (w, h) {
  154.     this.rightedge = w;
  155.     this.leftedge = 0;
  156.     this.topedge = 0;
  157.     this.bottomedge = h;
  158.     this.balls = new Array ();
  159.     this.mc = _root.createEmptyMovieClip ("basis", 1);
  160.     this.init ();
  161. }
  162. o = Hintergrund.prototype;
  163. o.init = function () {
  164.     this.drawBackground(this.mc);
  165.     this.setEventhandler ();
  166. };
  167. o.getRightedge = function () {
  168.     return this.rightedge;
  169. };
  170. o.addBall = function (n, r, c, g, d, b, t) {
  171.     this.balls.push (new Ball (n, r, c, g, d, b, t, this.rightedge, this.bottomedge));
  172. };
  173. o.positionAllBalls = function () {
  174.     var balls = this.balls;
  175.     for (i = 0; i < balls.length; i++) {
  176.         var r = balls[i].getRadius ();
  177.         balls[i].setBallPosition (Math.random () * this.getRightedge () - r, r);
  178.     }
  179. };
  180. o.setEventhandler = function () {
  181.     var bls = this.balls;
  182.     this.mc.onEnterFrame = function () {
  183.         for (i = 0; i < bls.length; ++i) {
  184.             bls[i].move ();
  185.         }
  186.     };
  187. };
  188. o.drawBackground = function (tempMC){
  189.     tempMC.rechteck(this.rightedge, this.bottomedge, 0xCCCCCC);
  190. }
  191. hg = new Hintergrund (500, 400);
  192. hg.addBall ("Gummiball", 25, 0xFF0000, 2, .99, .9, 10);
  193. hg.addBall ("Eisenkugel", 15, 0x669900, 4, .96, .5, 11);
  194. hg.addBall ("Tennisball", 20, 0xFFFF00, 2, .98, .8, 12);
  195. hg.positionAllBalls ();

Viel Spass damit,

Marpfei
Marpfei ist offline   Mit Zitat antworten
Alt 07-08-2003, 10:36   #11 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Zitat:
Geschrieben von son yu
also janosch
deine formel ist erstens der senkrechte wurf!

und zweitens vy ist nicht die geschwindigkeit auf der y-achse

sondern y zum zeitpunkt t

also physikbuch holen und nochmal nachlesen...

schöne grüße

ps: jetzt am grübeln für neue ideen is, formelsammlung sei dank
ähäm, natürlich hast du recht...v*t kann ja nicht ein neues v ergeben...
Die x(t)-Formel ließ ich weg, da sie ja sowiso nur linear ist.

Physik-Buch is nicht, sind ja Ferien...


@Marpfei
geiles Teil! Macht Spaß, damit rumzuspielen!
und es ist sehr allgemein, dein Ziel es so erweiterbar wie möglich zu machen ist ganz gut gelungen.

könntest du die Ellipsen-Funktion nicht selbst berechnen lassen, wieviele Segmente sie zeichenn muss? (aus rx und ry)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 07-08-2003, 10:52   #12 (permalink)
_______________
 
Benutzerbild von son yu
 
Registriert seit: Mar 2003
Ort: !Schnitzerland
Beiträge: 2.003
@ janosch wat is x linear...

les mal richtig...
Zitat:
x = v0 * t * cos(a) // x in abhängigkeit zur zeit

x is auch abhängig vom winkel beim schrägen wurf...

schöne grüße


ps: würd dir trotzdem das physikbuch mal empfehlen, dann schreibst net so'n mist hier rein
__________________
ey… be cool!

Mac OS-X 10.5.6, Safari Version 4 Public Beta (5528.16), on PowerBook 12" G4 1,5 GHz,
1,25 GB RAM, FlashPlayer 9 is auch noch da, wenn ich Lust habe…
son yu ist offline   Mit Zitat antworten
Alt 07-08-2003, 11:28   #13 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Zitat:
Geschrieben von son yu


ps: würd dir trotzdem das physikbuch mal empfehlen, dann schreibst net so'n mist hier rein
nana, jetzt solltest du dir das mal ansehen

das ist linear!!!
cos(a) ist eine Variable, die du VOR dem Wurf vergibst!!!!!!!

also ist die Funktion während dem Wurf LINEAR denn da steht damit

x(t) = v0*t*eineKonstanteDieFestGelegtIst;


EDIT:
vielleicht verstehst du jetzt auch, warum ich oben mit vy0 statt mit v0*cos(a) gearbeitet habe, schließlich ist cos nicht die schnellste Methode von Math.

d.h. es wäre gut, vy0 vor start der Animation zu berechnen

Geändert von Janoscharlipp (07-08-2003 um 11:34 Uhr)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 07-08-2003, 11:46   #14 (permalink)
_______________
 
Benutzerbild von son yu
 
Registriert seit: Mar 2003
Ort: !Schnitzerland
Beiträge: 2.003
okay die formel ansich vielleicht...

is ja auch nur theoretisch ohne luftwiderstand und gewicht des balls...

wenn du diese zwei dinge noch mit in die formel nimmst,
dann haste keine lineare bewegung mehr...

sorry da hab ich wohl wieder zu hoch
gedacht naja...

schöne grüße
__________________
ey… be cool!

Mac OS-X 10.5.6, Safari Version 4 Public Beta (5528.16), on PowerBook 12" G4 1,5 GHz,
1,25 GB RAM, FlashPlayer 9 is auch noch da, wenn ich Lust habe…
son yu ist offline   Mit Zitat antworten
Alt 07-08-2003, 11:59   #15 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
wir haben uns ja auch sehr um Luftwiderstand gekümmert

aber das würde mich mal interessieren, wie du das machst!

dürfte ziemlich komplex sein!
Fläche spielt rein, Geschwindigkeit macht sich (quadratisch??) bemerkbar, Oberfläche (in form einer Konstante???)

kA!
Janoscharlipp ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 00:53 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele