| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #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! |
| | |
| | #2 (permalink) |
| Neuer User 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) |
| | |
| | #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! |
| | |
| | #4 (permalink) |
| Neuer User 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 |
| | |
| | #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! |
| | |
| | #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! |
| | |
| | #7 (permalink) |
| aka stauby 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." |
| | |
| | #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! |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |