Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 30-06-2005, 22:36   #1 (permalink)
Subcolor
 
Registriert seit: Apr 2004
Beiträge: 67
Easing vor und zurück - Problem

Hallo Leute

zuerst einmal thx an alle die hier einem immer helfen!

ich möchte gerne immer mehr die easing_equations von R.Penner einsetzen und war damit auch schon erfolgreich.

wie folgt zu sehen..lasse ich ein Objekt auf der Bühne auf poppen:

Code:
Math.easeOutElastic = function (t, b, c, d, a, p) {
	if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
	if (a < Math.abs(c)) { a=c; var s=p/4; }
	else var s = p/(2*Math.PI) * Math.asin (c/a);
	return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
};

// Eigenschaften des MC´s
mc.t = 0;
mc.b = 0;
mc.c = 100;
mc.d = 15;
mc.onEnterFrame = function () {
        var t = this;
			if (t.t<t.d){
				t._xscale = Math.easeOutElastic(t.t,t.b,t.c,t.d);
				t._yscale = Math.easeOutElastic(t.t,t.b,t.c,t.d);
				t.t++;
			}
}
mein mc poppt auf der Bühne auf..
mein Problem dabei..
ich würde gerne nach ein paar Sekunden..mein mc wieder auf dieselbe Art und Weise zurück "poppen"..doch das funktioniert nicht

mit einer else-Fuunktion habe ich es versucht das gleiche Script nochmal anzuwenden..aber dabei habe ich b und c vertauscht..

es geht aber nicht..weiß jemand Rat???
im voraus vielen Dank!

im allgemeinen habe ich Probleme (wie zB auch ein Objekt das per easing in die Bühne einfliegt, wieder heraus fliegt)
flash_go ist offline   Mit Zitat antworten
Alt 30-06-2005, 23:26   #2 (permalink)
.
 
Registriert seit: May 2003
Ort: bayern
Beiträge: 1.117
du startest die selbe animation einfach andersrum...

ActionScript:
  1. // Eigenschaften des MC´s
  2. mc.t = 0;
  3. mc.b = 0;
  4. mc.e = 100;
  5. mc.c = mc.e - mc.b;
  6. mc.d = 15;
  7. mc.onEnterFrame = grow;
  8.  
  9. function grow(){
  10.    
  11.     this._xscale = Math.easeOutElastic(this.t++,this.b,this.c,this.d);
  12.     this._yscale = this._xscale;
  13.     if(this.t>this.d){
  14.         passed++;
  15.         delete this.onEnterFrame;
  16.         if(passed>1)return;
  17.         this.t = 0;
  18.         this.b = 100;
  19.         this.e = 0;
  20.         this.c = this.e - this.b;
  21.         this.onEnterFrame = grow;
  22.         }
  23.     }
__________________
[mooseMash]

Geändert von mooseMash (30-06-2005 um 23:35 Uhr)
mooseMash ist offline   Mit Zitat antworten
Alt 01-07-2005, 08:06   #3 (permalink)
Subcolor
 
Registriert seit: Apr 2004
Beiträge: 67
leider geht dass nicht so ganz..!

so wie du geschrieben hast, reicht eine Funktion für Rein und Raus, oder?

aber der mc soll ein paar Sekunden stehen bleiben.

aber mit if(passed>=1000) return;
geht dass nicht..und für was sorgt return?

er macht den mc zwar kleiner..aber endlos..

??
flash_go ist offline   Mit Zitat antworten
Alt 01-07-2005, 08:59   #4 (permalink)
.
 
Registriert seit: May 2003
Ort: bayern
Beiträge: 1.117
es ist wie du sagst, eine funktion für beide aktionen, damit das nicht endlos weiterläuft zähle ich die variable passed nach dem aufpoppen um eins hoch, passed++, wenn er das nächste mal mit der funktion fertig ist ist bereits alles wieder klein, hier soll die funktion stoppen, dafür steht nach dem delete onEnterFrame noch die action
ActionScript:
  1. if(passed>1)return;
was nichts anderes besagt als verlasse die funktion hier.

wenn du dazwischen eine pause haben willst kommst du um ein interval nicht rum, ich havb da mal was vorbereitet:

ActionScript:
  1. mc.t = 0;
  2. mc.b = 0;
  3. mc.e = 100;
  4. mc.c = mc.e - mc.b;
  5. mc.d = 15;
  6. mc.onEnterFrame = grow;
  7.  
  8. function grow(){
  9.         this._xscale = Math.easeOutElastic(this.t++,this.b,this.c,this.d)  ;
  10.         this._yscale = this._xscale;
  11.         if(this.t>this.d){
  12.                 passed++;
  13.                 delete this.onEnterFrame;
  14.                 if(passed>1)return;
  15.                 this.t = 0;
  16.                 this.b = 100;
  17.                 this.e = 0;
  18.                 this.c = this.e - this.b;
  19.        myInt = setInterval(initGrowing,2000,this);
  20.         }
  21. }
  22.  
  23.  
  24. function initGrowing(mc){
  25.     clearInterval(myInt);
  26.     delete myInt;
  27.     mc.onEnterFrame = grow;
  28. }

hier werden nach dem aufpoppen zunächst die werte für das 'einpoppen?' gesetzt und dann mit myInt = setInterval(initGrowing,2000,this); die funktion initGrowing nach 2000 millisekunden aufgerufen...

recht so?
__________________
[mooseMash]
mooseMash ist offline   Mit Zitat antworten
Alt 01-07-2005, 09:34   #5 (permalink)
Subcolor
 
Registriert seit: Apr 2004
Beiträge: 67
danke das funzt..
das war die Frage zum scalieren eines mc´s

und wenn ich den mc bewegen möchte?

kann ich es so machen?

Code:
mc.t = 0;
mc.b = 0;
mc.e = 100;
mc.c = mc.e - mc.b;
mc.d = 15;
mc.onEnterFrame = grow;

function grow(){
        this._x = Math.easeInOutElastic(this.t++,this.b,this.c,this.d) +450;
        this._y = Math.easeInOutElastic(this.t++,this.b,this.c,this.d) +465;
        if(this.t>this.d){
                passed++;
                delete this.onEnterFrame;
                if(passed>1)return;
                this.t = 0;
                this.b = 100;
                this.e = 0;
                this.c = this.e - this.b;
                myInt = setInterval(initGrowing,1000,this);
        }
}

function initGrowing(mc){
        clearInterval(myInt);
        delete myInt;
        mc.onEnterFrame = grow;
}
es ist halt ziemlich tricky mehrere Objekte auf einer Folie hineinfliegen zu lassen..am besten zeitversetzt..und nach gewisser Zeit wieder ausfliegen zu lassen..
flash_go ist offline   Mit Zitat antworten
Alt 01-07-2005, 09:48   #6 (permalink)
.
 
Registriert seit: May 2003
Ort: bayern
Beiträge: 1.117
im prinzip schon aber diese zeilen:
ActionScript:
  1. this._x = Math.easeInOutElastic(this.t++,this.b,this.c,this.d) +450;
  2.         this._y = Math.easeInOutElastic(this.t++,this.b,this.c,this. d) +465;
sind nicht gut, gibt doch deinen objekten die werte die sie brauchen mit

z.B.:
mc.x1 -> startPosition x
mc.x2 -> position nach reinkommen
mc.x3 -> position nach rausfliegen

dann gilt:
mc.t = 0;
mc.b = mc.x1;
mc.e = mc.x2;
mc.c = mc.e - mc.b;
mc.d = 15;
mc.onEnterFrame = grow;
dann schreibst du in der funktion
ActionScript:
  1. this._x = Math.easeInOutElastic(this.t++,this.b,this.c,this.d);

du kannst so jedem mc ne eigene dauer geben
mc.d = random(25)+5;
oder ne eigen intervalZeit nach der es wieder rausfliegen soll
mc.intTime = random(3000)+500;
ActionScript:
  1. myInt = setInterval(initGrowing,this.intTime,this);

du siehst der möglichkeiten sind da viele ich würde nur zusehen von absoluten zahlen in einer funktion abzusehen, sie ist dann viel flexibler einsetzbar...
__________________
[mooseMash]
mooseMash ist offline   Mit Zitat antworten
Alt 01-07-2005, 09:50   #7 (permalink)
Subcolor
 
Registriert seit: Apr 2004
Beiträge: 67
das ist super..

ich werde es mla versuchen

es hört sich auf jedenfall gut an..

leider habe ich immer noch Probleme mit den Funktionen und Verschachtelungen

thx
flash_go 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 06:18 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele