Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 18-03-2004, 17:03   #1 (permalink)
Neuer User
 
Registriert seit: Jun 2002
Beiträge: 90
Zart und geschmeidig wie der Robert Penner

Hallo Zusammen,
ich stell mir seit l?0Š1ngerem ne frage zu Bewegungsalgorithmen in Actionscript.

Um z.B. eine Eigenschaft (position, alpha, ...) eines Objects geschmeidig von Wert A zu Wert B zu bringen benutze ich gerne innerhalb eines enterframe-event folgenden Algorithmus:

ActionScript:
  1. onClipEvent(enterFrame){   
  2.       this.eigenschaft_x += ((zielwert_der_eigenschaft- istwert_der_eigenschaft)/12)/1.0;
  3. }

Den zielwert_der_eigenschaft halte ich nat¨¹rlich irgendwo auserhalb meiner enterframeroutine zB. _level0.zielwert_der_eigenschaft.

Sch?0‹2n und gut - funktioniert auch wunderbar schaut mal zB. hier
http://www.gold-wirtschaftswunder.de/vorschau/

F¨¹r folgende spielerei
(klikkt auf die kugeln) oder andere Projekte w¨¹rden mir die Algorithmen vom robert penner sehr gut gefallen z.B.

ActionScript:
  1. // cubic easing in/out - acceleration until halfway, then deceleration
  2. Math.easeInOutCubic = function (t, b, c, d) {
  3.     if ((t/=d/2) < 1) return c/2*t*t*t + b;
  4.     return c/2*((t-=2)*t*t + 2) + b;
  5. };

Ich suche nun einen Weg, diesen oder auch andere Penner-Algorithmen auf ?0Š1hnliche Art und Weise anzuwenden wie ich es oben schon mit dem N?0Š1herungsalgorithmus beschrieben habe.
Hmm Herr Penner arbeitet mit 4 parametern, die ich leider nicht wirklich verstehe.
t current time / current frame
b beginning value (w¨¹rde ich als istwert der eigenschaft verstehen)
c change value (meint er die differenz zwischen soll und istwert der eigenschaft?)
d duration (hier meint er wohl das tempi der animation)

Ok mal angenommen ich w¨¹rde f¨¹r meinen einfachen Algorithmus auch ne function schreiben, s?0Š1he diese sicherlich so aus

function get_new_value(var soll, var ist){
return ((soll - ist)/12)/1.0;
}

nun die frage, wird es m?0‹2glich sein dem herrn penner seine function so umzuschreiben,
dass ich nur noch die beiden parameter soll und ist bleiben.
Wenn das ginge w?0Š1re das so ziemlich der Hammer und w¨¹rde die wahnsinns Macht
Aller Geschmeidigkeiten in flash bedeuten.

Ich hoffe man hat mich verstanden
Und vielleicht wird¡¯s ja ein interessanter thread

tyrellinger
tyrellinger ist offline   Mit Zitat antworten
Alt 19-03-2004, 09:48   #2 (permalink)
Farbe ist Luxus
 
Benutzerbild von ludabruda
 
Registriert seit: May 2003
Ort: Köln
Beiträge: 2.405
Hi,

der Gedanke ist gar nicht schlecht, allerdings kommst du mit zwei Parametern nicht hin. Insbesondere bei EaseInOut-Funktionen nicht.
Die Parameter bedeuten im übrigen folgendes:

t: ist der Zähler
b: der Ist-Wert (allerdings immer der gleiche, sonst gehts schief)
c: ist die Änderung (also Soll-ist)
d: Anzahl Schritte

Beispiel:

In 10 Iterationen soll sich ein Objekt von _x = 10 nach _x=100 bewegen.

ActionScript:
  1. this._x = this.x = 10;
  2. this.endX = 100;
  3. this.steps = 10;
  4. this.counter = 0;
  5. this.onEnterFrame = function() {
  6.     if(this.counter < this.steps) {
  7.        this.counter++;
  8.       this._x = Math.EaseInOutCubic(this.counter,this.x,this.endX-this.x,this.steps);
  9. } else delete this.onEnterFrame;
  10. };

Du benötigst den Counter insofern auch, als dass du eine Austrittsbedingung für dein onEnterFrame brauchst.

Die Anzahl der Schritte ist wichtig, damit die Funktion weiß, wann das easing in und eann out geschehen soll.

Also: unter vier Parametern geht es nicht. Bei deiner Funktion mag das noch so sein. Aber Penners Funktionen sind auch insofern richtig gut, als das sie alle (bis auf Ausnahmen mit optionalen Parametern) die gleichen Parameter haben. So kann man in seinem Code schnell mal ein Easing ändern, ohne sich groß Gedanken zu machen. Das ist sehr modular gedacht und somit gut gelöst.

Grüße
Sascha
__________________
12:15, press return
ludabruda ist offline   Mit Zitat antworten
Alt 19-03-2004, 17:24   #3 (permalink)
Neuer User
 
Registriert seit: Jun 2002
Beiträge: 90
klingt gut

hey hallo,
ok wahnsinn - jetzt ist mir klar wie die methoden mit den 4 parameter einsetzen kann.
iss ja auch noch voll cool weil ich ja den zeitraum meiner animation festlegen kann.

ich danke und werde bericht erstatten am we.

tyrellinger
tyrellinger ist offline   Mit Zitat antworten
Alt 22-03-2004, 10:07   #4 (permalink)
Neuer User
 
Registriert seit: Jun 2002
Beiträge: 90
es tut

ok nochmal hallo,
es tut! hab jetzt quasi die macht über die
robert penner algorithmen.

hab es jetzt mal so vorab gebaut:

ActionScript:
  1. function naeher_1(objekt, soll){
  2.     return ((soll-objekt._y)/6)/1.2;
  3. }
  4. function naeher_2(t, b, c, d) {
  5.         if ((t/=d/2) < 1) return c/2*t*t*t + b;
  6.         return c/2*((t-=2)*t*t + 2) + b;
  7. };
  8. function naeher_3(t, b, c, d) {
  9.         if (t==0) return b;
  10.     if (t==d) return b+c;
  11.     if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
  12.     return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
  13. };
  14.  
  15. this.onEnterFrame = function(){
  16.     //inst_streifen._y += naeher_1(inst_streifen, _level0.ydest);
  17.     if(_level0.step++ < 20){
  18.         inst_streifen._y = naeher_3(_level0.step, _level0.ystart, _level0.ydest-_level0.ystart, 20);
  19.     }
  20.     //inst_streifen._y = _level0.dest_y;
  21. }
  22.  
  23. this.inst_button_upp.onPress = function(){
  24.     //trace("asdf");
  25.     if(_level0.currpos > 1){
  26.         _level0.currpos--;
  27.         _level0.ystart = inst_streifen._y;
  28.         _level0.ydest = inst_streifen._y - 120;
  29.         _level0.step = 1;
  30.     }
  31. }
  32. this.inst_button_down.onPress = function(){
  33.     //trace("asdfff");
  34.     if(_level0.currpos < _level0.maxpos){
  35.         _level0.currpos++;
  36.         _level0.ystart = inst_streifen._y;
  37.         _level0.ydest = inst_streifen._y + 120;
  38.         _level0.step = 1;
  39.     }
  40. }

hier kann man es sich anschauen
bitte auf den grünen button 'GRAFIK' klikken und dann die kleinen pfeile in der rechten navi klikken.

ich danke nochmal für den ansatz er hat mir wirklich geholfen.

Was ich jetzt bischen schade finde, ist dass die algorithmen, die so ein federn erzeugen nicht bei den downloadbaren dabei ist (zb. easingOutElastic)

bye
tyrellinger
tyrellinger ist offline   Mit Zitat antworten
Alt 22-03-2004, 10:30   #5 (permalink)
God made me funky..
 
Registriert seit: Apr 2003
Ort: Bremen
Beiträge: 1.067
Ist das nicht die hier?:
ActionScript:
  1. Math.easeOutElastic = function (t, b, c, d, a, p) {
  2.     if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
  3.     if (a < Math.abs(c)) { a=c; var s=p/4; }
  4.     else var s = p/(2*Math.PI) * Math.asin (c/a);
  5.     return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
  6. };
__________________
Kunst ist in erster Linie eine Frage der Form und nicht des Inhalts
Paul Rand
e2e4 ist offline   Mit Zitat antworten
Alt 22-03-2004, 10:46   #6 (permalink)
Neuer User
 
Registriert seit: Jun 2002
Beiträge: 90
danke!
Sind die beiden neuen parameter 'a' und 'p' irgendwo dokumentiert oder kann mir jemand sagen was ich da reinschreiben soll?
tyrellinger ist offline   Mit Zitat antworten
Alt 22-03-2004, 10:48   #7 (permalink)
God made me funky..
 
Registriert seit: Apr 2003
Ort: Bremen
Beiträge: 1.067
direkt aus dem AS von Robert Penner: http://www.robertpenner.com/easing/easing_equations.as

/////////// ELASTIC EASING: exponentially decaying sine wave //////////////

// t: current time, b: beginning value, c: change in value, d: duration, a: amplitude (optional), p: period (optional)
// t and d can be in frames or seconds/milliseconds
__________________
Kunst ist in erster Linie eine Frage der Form und nicht des Inhalts
Paul Rand
e2e4 ist offline   Mit Zitat antworten
Alt 22-03-2004, 10:57   #8 (permalink)
Neuer User
 
Registriert seit: Jun 2002
Beiträge: 90
ok es tut - cool - danke.
wow - jetzt bin ich echt bischen begeistert.
tyrellinger 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 14:20 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele