Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 13-08-2004, 09:50   #1 (permalink)
Member
 
Registriert seit: Aug 2001
Ort: Oldenburg
Beiträge: 313
Dynamisches abbremsen

Hallo Leute!

Ich habe eine Funktion geschrieben, die mit mit setInterval Animationen innerhalb einer bestimmten Zeit erstellt.
Sprich: Objekt zoomt innerhalb von 1000 ms von 0 auf 100 und passt dazu noch den Alphawert an (oder ähnliches).

Bei der Funktion errechne ich als erstes eine Prozentzahl über die ich alles andere steuern kann, was auch soweit funktioniert.

Was mir jetzt noch fehlt ist ein Wert für dynamisches Abbremsen, genau wie bei normalen Tweens von -100 bis 100. Leider hab ich es bis jetzt noch nicht so richtig hinbekommen die Prozentzahl damit zu "verknüpfen".

Kann mir irgendjemand bei der Formel helfen?
Ich muß ja eigentlich "nur" wissen, wie viel Prozent nach, sagen wir mal, 750 ms "vergangen" sind, wenn ich am Ende um 100% abbremsen will.


mfg
Mark
__________________
Es ist alles ganz einfach,
deshalb ist es so schwer!
markherzberg ist offline   Mit Zitat antworten
Alt 13-08-2004, 10:07   #2 (permalink)
Neuer User
 
Benutzerbild von :: RK ::
 
Registriert seit: Jan 2002
Ort: Umgebung Stuttgart
Beiträge: 5.412
hi,

Prinzip:
du errechnest bei jeder Wertänderung die Differenz der momentanen Position
und der Zielposition. Diesen Wert teilst du dann durch ne Zahl. Mit dem Teiler
etwas spielen, bis du ne schöne Bremsbewegung erhälst.

Ist die momentane Position größer als de Zielposition, dann so:
this._x += (xZiel-this._x)/3;
this._y += (yZiel-this._x)/3;



__________________
Das Glück im Leben hängt von den guten Gedanken ab, die man hat.

Easing_Equations / Flash Kontaktformular / FlashPlugin W3C konform / Nützliche Beiträge zu FAQs

Geändert von :: RK :: (13-08-2004 um 10:11 Uhr)
:: RK :: ist offline   Mit Zitat antworten
Alt 13-08-2004, 10:14   #3 (permalink)
Member
 
Registriert seit: Aug 2001
Ort: Oldenburg
Beiträge: 313
Ja klar, das geht schon aber ich will ja exakt wissen wieviel Prozent ich habe wenn 750 von 1000 ms abgelaufen sind und ich eine Verzögerung von 100% haben will. Sollte schpon etwas komplizierter sein...
__________________
Es ist alles ganz einfach,
deshalb ist es so schwer!
markherzberg ist offline   Mit Zitat antworten
Alt 13-08-2004, 10:21   #4 (permalink)
Neuer User
 
Benutzerbild von :: RK ::
 
Registriert seit: Jan 2002
Ort: Umgebung Stuttgart
Beiträge: 5.412
von was willst du die prozente haben, von der vergangenen Zeit oder
von der zurückgelegten Entfernung zwischen Anfangspunkt und Ziel ???
__________________
Das Glück im Leben hängt von den guten Gedanken ab, die man hat.

Easing_Equations / Flash Kontaktformular / FlashPlugin W3C konform / Nützliche Beiträge zu FAQs
:: RK :: ist offline   Mit Zitat antworten
Alt 13-08-2004, 10:56   #5 (permalink)
Member
 
Registriert seit: Aug 2001
Ort: Oldenburg
Beiträge: 313
Von den Prozent.
Ich habe 100%, die in 1000 ms "abgehandelt" werden. Jetzt frage ich die Prozentzahl nach 750 ms ab...wieviel Prozent sind seit dem ersten Aufruf (0 ms) vergangen?

Ohne abbremsen rechne ich: 100/zeit*(getTimer()-zeit2);
zeit2 wird am Anfang mit getTimer bestimmt...geTimer()-zeit2 sind JETZT also 750 ms...so und jetzt kommt das Abbremsen dazu. Muß also was mit sinus oder so zu tun haben
__________________
Es ist alles ganz einfach,
deshalb ist es so schwer!
markherzberg ist offline   Mit Zitat antworten
Alt 17-08-2004, 09:32   #6 (permalink)
Member
 
Registriert seit: Aug 2001
Ort: Oldenburg
Beiträge: 313
So, durch Hilfe eines Kolegen bin ich schonmal auf folgende Funktion gekommen:

var proz3 = 100*Math.exp(-5*(proz2/100));

proz2 ist hierbei die Prozentzahl die bis jetzt abgelaufen ist, also bei 750 ms 75% usw. streng linear halt...

Was ich jetzt bräuchte wär ein Matheass, das mir erzählen kann, wie ich das, anstelle der -5, noch mit dynamischen werten lösen kann und es trotzdem in genau der angegeben prozentzahl abläuft.
__________________
Es ist alles ganz einfach,
deshalb ist es so schwer!
markherzberg ist offline   Mit Zitat antworten
Alt 17-08-2004, 10:31   #7 (permalink)
aka stauby
 
Benutzerbild von webdust
 
Registriert seit: Mar 2004
Ort: Würzburg
Beiträge: 705
Hmmm... entweder stehe ich grade ziemlich auf dem Schlauch, oder irgendwas passt da nicht. Denn, wenn ich mir das ganze mal allgemein überlege:

Du hast zwei Funktionen, von denen die eine linear verläuft. Dann definieren wir uns mal - wie wir Physiker es gerne machen - eine kleines Zeitelement "dt", welches genau der Dauer eines Frames entspricht. Dann gilt für die lineare Funktion:

prozent_linear = Anzahl*dt/Gesamtdauer;

Anzahl*dt entspricht hierbei der bereits abgelaufenen Zeit, also

(1) prozent_linear = T/Gesamtdauer;

Anzahl ist hierbei die Anzahl der Frames. Nun wollen wir eine zweite Funktion, die irgendwie "abgebremst" wird. Meinetwegen mit einer beliebigen Variablen x > 0 lautet diese Funktion, wenn man als n die Nummer des Frames wählt:

Wert(n+1) = Wert(n)* (1/x);

Geht man von t=0 aus, dann hat man zur Zeit T:

Wert(T) = Wert(t=0)*(1/x)^(Anzahl) wobei mit Anzahl = T/Gesamtdauer folgt:

Wert(T) = Wert(0)*(1/x)^(T/Gesamtdauer);

mit obigen Ergebnis (1) erhält man, wenn man das ganze noch durch Wert(0) dividiert:

Wert(T)/Wert(0) = prozent_2/100 = (1/x)^(prozent_linear);

Nun ist das Problem, dass Flash außer dem Exponenten zu e keine Exponentialfunktionen unterstütz, daher muss man das ganze noch auf Basis e umformen:

prozent_2=100*exp(-alpha*prozent_linear);

Für den Skalierungsfaktor alpha ergibt sich, wie man leicht nachrechnen kann: alpha = ln(x);


Im Endeffekt lautet dann deine Formel:

prozent = 100*Math.exp(-Math.log(x)*prozent_linear);

Mit beliebigen Werten für x; Was mich nun an deiner angegeben Formel deines Kollegen gestört hat: 5 ist ein ziemlich gerade Wert für einen log. D.h., du müsstest das ganze mit 148,413 abbremsen lassen, außer ich habe mich hier irgendwie ziemlich verhauen?!
__________________
"The things you own end up owning you."
webdust ist offline   Mit Zitat antworten
Alt 06-09-2004, 08:32   #8 (permalink)
Member
 
Registriert seit: Aug 2001
Ort: Oldenburg
Beiträge: 313
Danke Webdust!
Das war (fast) genau das was ich gesucht habe. Hab leider viel zu spät geguckt ob noch jemand geantwortet hat, also entschuldige, dass ich mich erst jetzt wieder melde!
ich habe bei deienr Function noch ein /100 eingefügt, um von dieser unmöglich großen Prozentzahl weg zu kommen. Mit: prozent = 100*Math.exp(-Math.log(x)*(prozent_linear/100)); klappt es wunderbar, nur dass ich noch nciht ganz weiß wie ich das Ganze mit x so beeinflußen kann, das er bei 50% Abbremsung halb so viel abbremst wie bei 100%.

Im Moment kommt es eingentlich nur dazu, das sich mein Objekt am Anfang schnell auf den Endpunkt zubewegt und dann den Rest der Zeit fast gar nicht mehr bewegt wird.

Hast du vielleicht noch ne Idee wie ich das Abbremsen am Anfang umsetzen könnte?


mfg
Mark Herzberg
__________________
Es ist alles ganz einfach,
deshalb ist es so schwer!
markherzberg 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 05:45 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele