Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 12-07-2005, 21:12   #1 (permalink)
Neuer User
 
Registriert seit: Jul 2004
Beiträge: 14
Beschleunigung bei Annäherung

morsche,

ich habe nun schon lange die Suchfunktion gequält, aber ich finde immer nur Ansätze wie man einen MC linear beschleunigen oder expoenziell abbremsen kann - wie das beides funktioniert, weiß ich. Keine Ahnung, ob ich nur total auf dem Schlauch stehe, aber hier mein Problem - ich würde mich freuen, wenn mir jemand helfen könnte:

Ich habe einen MC, der sich selbst per onEnterFrame bewegt. Dabei gibt es die Variante, die ich schon fertig habe, bei der sich der MC mit geringerwerdender Geschwindigkeit auf einen Punkt zubewegt und dabei langsam abbremst (distanz/teiler) und die mir noch fehlende Variante, bei der sich ein MC mit beschleunigender Geschwindigkeit auf einen Punkt zubewegen soll. Dabei existiert leider nicht der Startpunkt (das würde es einfach machen), sondern nur die Zielkoordinate und natürlich die Koordinaten des MCs. Die geschwindigkeit soll exponenziell (oder wie auch immer ich das jetzt nennen soll) ansteigen - also keine lineare Beschleunigung...

Mit welcher Formel komme ich zu einer Lösung dieses Problems? Eigentlich müsste ich den richtigen Graphen doch mit der Wurzel-Funktion (Math.sqrt) erreichen können, aber das klappt auch nicht...

Vielen Dank schonmal für Hilfe...

Gruß
acid_ice ist offline   Mit Zitat antworten
Alt 12-07-2005, 21:26   #2 (permalink)
Co&Bold
 
Benutzerbild von Cysign
 
Registriert seit: Nov 2004
Ort: Troisdorf (bei Köln)
Beiträge: 170
multipliziere die geschwindigkeit doch einfach mit 1.x, oder reicht dir das nich?
__________________
Friede!
Cysign ist offline   Mit Zitat antworten
Alt 12-07-2005, 22:01   #3 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
ich werde jetzt mal ignorieren was du da von "exponetiell" und "linearer beschleunigung" gesagt hast *g* entweder macht das keinen sinn oder es is mir zu hoch.

so wies aussieht hängt die geschwindigkeit vom Abstand ab, ale je weiter weg, desto langsamer.
geschwinigkeit = faktor/abstand;
(exponentiell: geschwindigkeit = maximale Geschwindigkeit*e^-Abstand)

dabei kannst du x und y nicht einfach getrennt voneinander behandeln
du musst den abstand ausrechnen mit Math.sqrt(x*x+y*y);

ich werds mal versuchen... wenn ich was schaffe melde ich mich!
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 12-07-2005, 22:11   #4 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
Ok, 1 Lösungsansatz:

ActionScript:
  1. this.onEnterFrame = function(){
  2.  dx = _xmouse;
  3.  dy = _ymouse;
  4.  
  5.  da = Math.sqrt(dx*dx+dy*dy)
  6.  _x += dx*500/da/da;
  7.  _y += dy*500/da/da;
  8. }
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 12-07-2005, 22:18   #5 (permalink)
Neuer User
 
Registriert seit: Jul 2004
Beiträge: 14
Lineare Beschleunigung = Erhöhung der Beschleunigung um eine Konstante
Expoentielle Beschleunigung = Erhöhung der Beschleunigung um einen z.B. potenzierten Wert (in diesem Fall um die geteilte Distanz zwischen Position und Ziel)...

Zumindest habe ich es so irgendwann mal in der Schule gelernt. Aber sehen wir mal davon ab - hier ein Beispiel wie ich immer meine MC bewege (mag schon sein, dass das nicht die elegenteste Variante ist)

this.onEnterFrame=function()
{
if(this._x<this.gotox)
{
this._x=this._x+(0.5*(this.gotox-this._x));
diff=this._x-this.gotox;
if(diff<0)diff=diff*-1;
if(diff<1.5)this._x=this.gotox;
}

[...analog für die y achse und jeweils für den this._x/_y > ... Fall...]

}

Das funktioniert und ich dabei bremst der MC kurz vor Erreichen von "gotox" ab. Meine Frage: wie kann ich anfangs abbremsen und dann den MC schnellerwerdend auf "gotox" zubewegen.
acid_ice ist offline   Mit Zitat antworten
Alt 12-07-2005, 22:21   #6 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
Lösungsansatz 2:
ActionScript:
  1. vmin = 2;
  2. vmax = 30;
  3. this.onEnterFrame = function(){
  4.  dx = _xmouse;
  5.  dy = _ymouse;
  6.  da = Math.sqrt(dx*dx+dy*dy);
  7.  vf = vmin+(vmax-vmin)*Math.pow(Math.E, -da/50);
  8.  _x += dx/da*vf;
  9.  _y += dy/da*vf;
  10. }

hier exponentiell
du kannst min. und max. geschwindigkeit festlegen
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 12-07-2005, 22:29   #7 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
Nr. 3:
ActionScript:
  1. vx = 0;
  2. vy = 0;
  3. this.onEnterFrame = function(){
  4.  dx = _xmouse;
  5.  dy = _ymouse;
  6.  vx +=  dx/100;
  7.  vy +=  dy/100;
  8.  
  9.  _x += vx*=0.95;
  10.  _y += vy*=0.95;
  11. }

hier wird die geschwindigkeit gespeichert...
ist mehr dynamik, und es muss nicht sein dass der Punkt genau das Ziel trifft, wenn sich das ziel bewegt! (wenn du die maus bewegst)
dafür gibts das problem nicht, das er zu springen anfängt, wenn er sein ziel erreicht hat.
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 12-07-2005, 22:39   #8 (permalink)
Neuer User
 
Registriert seit: Jul 2004
Beiträge: 14
Vielen Dank für die Antworten - heute werde ich es wohl nicht mehr schaffen, aber sobald ich es morgen umgesetzt habe, schreibe ich nochmal, was am besten geklappt hat
acid_ice ist offline   Mit Zitat antworten
Alt 13-07-2005, 15:57   #9 (permalink)
Frager-Fan
 
Benutzerbild von speebo
 
Registriert seit: Jun 2005
Beiträge: 210
bin noch recht unerfahren im AS. Ein bisschen kann ich schon, aber ich komme nicht voran wenns komplizierter wird.

Kennt wer gscheite tuts zu dienem thema mausverfolgung.

ich wollte, dass ein mc dem mauszeiger mit abstand folgt (selber pfad) und dann abbremst wenn er sich dem ruhenden mauszeiger nähert.


wie könnte man sowas ganz schnell basteln?



mfg speebo
__________________
Never run a touching System!
speebo ist offline   Mit Zitat antworten
Alt 13-07-2005, 16:51   #10 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
wenn es wirklich der selbe pfad sein muss, wirds kompliziert...

was ich noch vorschlagen kann, ist IK. (inverse kinematik)
kenn mich darin zwar auch nicht wirklich aus, aber für deine aufgabe reicht es

hier mal mein IK ansatz:
ActionScript:
  1. fr = 30; //Fix-Abstand
  2. this.onEnterFrame = function(){
  3.  tx = _parent._xmouse;
  4.  ty = _parent._ymouse;
  5.  dx = _x - tx;
  6.  dy = _y - ty;
  7.  da = Math.sqrt(dx*dx+dy*dy);
  8.  _x = tx + dx/da*fr;
  9.  _y = ty + dy/da*fr;
  10. }

hier wird einfach immer der Abstand auf 30 normalisiert.
Jetzt müsste man nur den Abstand dynamisch regeln, hier ist die frage wie man diesen regelt... (vl. abhängig von der Mausgeschwindigkeit?)

aber der punkt folgt schon mal der Maus in fixem abstand...
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 13-07-2005, 17:03   #11 (permalink)
Frager-Fan
 
Benutzerbild von speebo
 
Registriert seit: Jun 2005
Beiträge: 210
welche ist denn die bezeichnung für den mc der folgen soll? .. sorry. ^^

... achso ja, nach geschwindigkeit wäre perfekt. :P
__________________
Never run a touching System!
speebo ist offline   Mit Zitat antworten
Alt 13-07-2005, 18:35   #12 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
der instanzname ist egal!
du musst das script im MC ausführen
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 13-07-2005, 21:35   #13 (permalink)
Frager-Fan
 
Benutzerbild von speebo
 
Registriert seit: Jun 2005
Beiträge: 210
also in den ersten frame vom mc oder mc anklicken und dann "draufpacken"?

.... sorry für diese doofen fragen. bin grade wieder zuhause und kannst nicht testen. so kann ichs dann moin dirket ausprobiern.


schönen abend noch!

mfg speebo
__________________
Never run a touching System!
speebo ist offline   Mit Zitat antworten
Alt 13-07-2005, 22:58   #14 (permalink)
Neuer User
 
Registriert seit: Jul 2004
Beiträge: 14
Hi,

also diese Variante gefällt mir sehr gut - schöne Bewegung. Nur leider muss ich das nicht mit der Mausposition in Verbindung bringen, sondern mit der Position z.B. eines anderen MCs im _root. Der MC mit der Bewegungsformel liegt ebenfalls im _root. Aber wenn ich die Mauskoordinaten im MC selbst aufrufe, bekomme ich ja eine relative Position der Maus innerhalb des Clips. Ich müsste das Ganze aber im Bezug auf die globalen Koordinaten machen und wenn ich die einfach an den MC übergebe geht es schonmal gar nicht. Habe dann die aktuelle Position des MC im _root von den übergebenen Koordinaten abgezogen, um wieder auf einer relative (analog zur Mausposition) Position zu kommen. Das Prinzip funktioniert auch, nur irgendwie ist dann alles um eine fixe Pixelzahl nach oben versetzt... Was kann man da machen?
Und wie kann ich es am einfachsten erreiche, dass die Bewegung gestoppt wird, wenn die übergebenen Koordinaten überschritten sind? Hatte bisher die aktuelle von der übergebenen Position abgezogen und den Betrag davon als Anhaltspunkt verwendet. Wenn wieder kleiner als z.B. 1Px war, habe ich abgebrochen. Aber bei dieser Bewegung wird das schwer, da es ja auch sein könnte, dass durch eine bestimmte Schwingung um die Zielkoordinate, sich der MC dieser nicht auf Anhieb dem o.g. 1Px-Radius nähert...



Zitat:
Zitat von Alphanimal
Nr. 3:
ActionScript:
  1. vx = 0;
  2. vy = 0;
  3. this.onEnterFrame = function(){
  4.  dx = _xmouse;
  5.  dy = _ymouse;
  6.  vx +=  dx/100;
  7.  vy +=  dy/100;
  8.  
  9.  _x += vx*=0.95;
  10.  _y += vy*=0.95;
  11. }

hier wird die geschwindigkeit gespeichert...
ist mehr dynamik, und es muss nicht sein dass der Punkt genau das Ziel trifft, wenn sich das ziel bewegt! (wenn du die maus bewegst)
dafür gibts das problem nicht, das er zu springen anfängt, wenn er sein ziel erreicht hat.
acid_ice ist offline   Mit Zitat antworten
Alt 13-07-2005, 23:23   #15 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
in den ersten frame!

sonst würdest du ja ein onClipEvent brauchen! (geht auch!)

aber da es this.onEnterFrame heisst, gehörts in den ersten frame

daran solls nicht scheitern
__________________
Some Flash Worx
Alphanimal 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 19:47 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele