Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 09-09-2004, 12:27   #1 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Ort: Stuttgart
Beiträge: 58
Question Funktionen und setInterval ?

Hi leute steh grad mal aufm schlauch, ich komm ned dahinter wie ich setinterval in ner funktion sinvoll einsetze, könnt ihr mir mal auf die sprünge helfen?
ich versuche on klick ein bild auszublenden (alpha) und zwar per setInterval (oder gibts nen besseren weg?), im mc code selber hab ich das hinbekommen, aber da die funktionalität ein paar mal im clip aufgerufen werden soll, möcht ich das halt in ner funktion haben... im aktuellen stand durchläuft das script einmal (alpha +5).

Hier mal der code:

Code:
on (release) {
	//------------------------------------------------
	function fadeIn(fader,objekt) {
		trace(fader); trace(objekt);
		trace("Fade in: "+ objekt._alpha);
		objekt._alpha += 5;
		if (objekt._alpha > 100) {
		  clearInterval(fader);
		  trace("clear Fade in");
		}
	}
	
	function fadeOut(fader,objekt) {
		trace(fader); trace(objekt);
		trace("Fade out: "+ objekt._alpha);
		objekt._alpha -= 5;
		if (objekt._alpha < 0) {
		  clearInterval(fader);
		  trace("clear Fade out");
		}
	}
	fade = function(fader,modi,objekt){
			//trace(fader); trace(modi); trace(objekt);
			if(modi=="in"){
				fad=setInterval(fadeIn(fader,objekt), 50, objekt);
			}
			if(modi=="out"){
				fad=setInterval(fadeOut(fader,objekt), 50, objekt);
			}
			trace(fad);
			//fade("fade"+i,in,_root.werke.bild_gross);
	}
	//------------------------------------------------

//aufruf
my_mcl.loadClip("../upload/arbeiten/"+_global.tmpArr[i].file, _root.werke.bild_gross);
_root.werke.bild_gross._alpha=0;
fade("fade"+i,"in",_root.werke.bild_gross);
Luchs ist offline   Mit Zitat antworten
Alt 09-09-2004, 13:47   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
setInterval würde ich für solche Sachen nicht unbedingt nehmen, der ist mehr für Verzögerungsfunktionen oder Beeinflussung der Framerate gedacht. Nimm besser einen onEnterFrame-Event, bspw.:
ActionScript:
  1. function fadeIn(fader,objekt) {
  2.     trace(fader);
  3.     trace(objekt);
  4.     trace("Fade in: "+ objekt._alpha);
  5.     _global.ref = this;//Referenz setzen auf dieses Obj
  6.    
  7.     _level0.createEmtpyMovieClip("watcher",1);//leeren MC erstellen
  8.     _level0.watcher.onEnterFrame = function(){//auf diesen MC einen onEnterFrame-Event legen
  9.     _global.ref.objekt._alpha += 5;//kontinuierlich den Alphawert des MCs erhöhen
  10.        if (_global.ref.objekt._alpha >= 100) {//wenn 100 Prozent erreicht
  11.          delete _level0.watcher.onEnterFrame;//den onEnterFrame-Event wieder löschen
  12.                            _level0.watcher.removeMovieClip();//und den MC wieder löschen
  13.          trace("clear Fade in");
  14.        }
  15. }
  Mit Zitat antworten
Alt 09-09-2004, 14:00   #3 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Ort: Stuttgart
Beiträge: 58
Danke HW, bist echt super. aber würd das bei sagen wir 40 bis 80 leer erzeugten watchern nicht ein wenig schmutzig sein?

im prinzip soll ja nur ein tweening effekt enstehen der auf dem alpha des geladenen bildes liegt
Luchs ist offline   Mit Zitat antworten
Alt 09-09-2004, 15:42   #4 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
würd das bei sagen wir 40 bis 80 leer erzeugten watchern nicht ein wenig schmutzig sein?
Quick and dirty *hechelgeifersabberlechz*

Nein, Spaß beiseite, ist völlig ok, solange du die MCs wieder removst... Du kannst natürlich den onEnterFrame auch auf der Hauptzeitleiste laufen lassen und sparst dir dann das Erstellen und Löschen von EnterFrame-Events und -MCs, wenn du aber gleichzeitig auf der Hauptzeitleiste eine kontinuierliche Animation o.ä. am Laufen hast, wird es schwierig. Deswegen erstell ich mir immer leere MCs, die den EnterFrame übernehmen.
  Mit Zitat antworten
Alt 09-09-2004, 15:43   #5 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
wo werden denn 40-80 leere watcher erstellt?
pape ist offline   Mit Zitat antworten
Alt 09-09-2004, 15:56   #6 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Ort: Stuttgart
Beiträge: 58
Cool

hmm, ok... ein wenig dreckig mögens wir ja alle
ich nehm mir deinen vorschlag zu herzen HW, aber rein interessehalber würd ich trotzdem gern wissen, wieso setinterval in der function ned tut.

@pape, da werden NOCH keine erstellt, aber in dem mc den ich bastel dann
Luchs ist offline   Mit Zitat antworten
Alt 09-09-2004, 15:59   #7 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
achso.. hab mich schon gewundert wo das stehen soll...

ähm.. dein setInterval geht vermutlich nicht weil du
clearInterval(fader);
stehen hast und nicht
clearInterval(fad);

achso.. und die parameter übergabe ist falsch!
muss so heißen:
ActionScript:
  1. if(modi=="in"){
  2. fad=setInterval(fadeIn, 50, fader,objekt);
  3. //...bzw.
  4. fad=setInterval(fadeOut, 50, fader,objekt);

grz
pape

Geändert von pape (09-09-2004 um 16:03 Uhr)
pape ist offline   Mit Zitat antworten
Alt 09-09-2004, 16:14   #8 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Ort: Stuttgart
Beiträge: 58
Lightbulb

mhh danke!

stimmt, sooooo gehts *kugel vor freude*

hätt mir aber auch auffallen könne, ... das kommt davon wenn man zuviel bastelt und zu viel nachdenkt, da sieht man den wald vor lauter bäumen ned mehr
Luchs ist offline   Mit Zitat antworten
Alt 09-09-2004, 17:46   #9 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Ort: Stuttgart
Beiträge: 58
Unhappy traces

nein geht doch noch ned, kriegsch plaque *g
er läuft sich zu tode,.. macht quasi den clearInterval ned...

wie ist das in flash mit funktionen und wertübergaben?, ...

Code:
fade = function(fader,modi,objekt)
<- da bekomm ich doch von aussen die werte und kann sie wie variablen weiterbenutzen?
also "fader" hat den inhalt "fade1".

dann passiert in der reihenfolge dies:
Code:
if(modi=="in"){ fader=setInterval(fadeIn, 60, fader, objekt);
fader müßte doch dann durch die variable fade1 heißen? oder muss ich das dann in nen eval stecken (probier... geht ned!)?

dann passiert in der reihenfolge das:
der fadeIn wird aufgerufen durch setInterval, bekommt die pararmeter wieder übergeben. auch dort:
fader müßte doch dann durch die variable fade1 heißen?
(so würds dann zumindest in php gehen )

so please... ein denkanstoß noch, bitte


traces geben zb. das aus:
Code:
Fade IN gross_fade0: _level0.werke.bild_gross a: 121.875
gross_fade0
stop gross_fade0
das sagt mir doch, das der a(lpha) über hundert ist, daß das ziel-objekt existiert (wird ja auch eingeblendet) und das der setInterval-objekt(gross_fade0) entladen worden sein müßte,..
wieso läuft das ******* ding dann nach 100 noch? *verzweifel*

Gruß Chris

Code:
//das ganze nochmal in der übersicht ;)
fadeIn = function (fader,objekt) {
	trace("Fade IN: "+ objekt +" a: "+objekt._alpha);
	objekt._alpha = objekt._alpha+5; trace(fader);
	if (objekt._alpha >= 100) {
		clearInterval(fader);
		trace("stop");
	}
}
fade = function(fader,modi,objekt){
		if(modi=="in"){ fader=setInterval(fadeIn, 60, fader, objekt); }
		if(modi=="out"){ fader=setInterval(fadeOut, 60, fader, objekt); }
}


//aufruf fade-in zb:
_root.fade("fade1","in",_root.werke["bild_klein1"]);

Geändert von Luchs (09-09-2004 um 20:07 Uhr) Grund: ergänzung
Luchs ist offline   Mit Zitat antworten
Alt 09-09-2004, 20:11   #10 (permalink)
Banned
 
Benutzerbild von projecktx
 
Registriert seit: Sep 2003
Beiträge: 2.071
ehrlich gesagt ich würds auch so machen wie agedoubleu aber zu deinem letzten beitrag da stimmt die syntax nicht:

ActionScript:
  1. //das ganze nochmal in der übersicht ;)
  2. fadeIn = function (fader, objekt) {
  3.     trace("Fade IN: "+ objekt +" a: "+objekt._alpha);
  4.     objekt._alpha = objekt._alpha+5; trace(fader);
  5.     if (objekt._alpha == 100) {
  6.         clearInterval(fader);
  7.         trace("stop");
  8.     }
  9. }
  10. fade = function(fader,modi,objekt){
  11.         if(modi=="in"){ fader=setInterval(fadeIn(fader, objekt), 60; }
  12.         if(modi=="out"){ fader=setInterval(fadeOut(fader, objekt), 60; }
  13. }
  14.  
  15.  
  16. //aufruf fade-in zb:
  17. _root.fade("fade1","in",_root.werke["bild_klein1"]);

allerdings wie gesagt ich würds mit einem on enter frame machen wie HW und mit set intevall in functionen hab ich schon schlechte erfahrungen gemacht.

gruss Sascha
projecktx ist offline   Mit Zitat antworten
Alt 09-09-2004, 20:40   #11 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
@projecktx: Dein Footer gefällt mir, endlich mal jemand, der sich als Java-Hasser outet...
  Mit Zitat antworten
Alt 10-09-2004, 09:26   #12 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Ort: Stuttgart
Beiträge: 58
Talking

Zitat:
Zitat von projecktx
ehrlich gesagt ich würds auch so machen wie agedoubleu aber zu deinem letzten beitrag da stimmt die syntax nicht:
du hast ja auch die alte genommen, die neue sieht ja so aus:
Code:
//das ganze nochmal in der übersicht ;)
fadeIn = function (fader,objekt) {
	trace("Fade IN: "+ objekt +" a: "+objekt._alpha);
	objekt._alpha = objekt._alpha+5; trace(fader);
	if (objekt._alpha >= 100) {
		clearInterval(fader);
		trace("stop");
	}
}
fade = function(fader,modi,objekt){
		if(modi=="in"){ fader=setInterval(fadeIn, 60, fader, objekt); }
		if(modi=="out"){ fader=setInterval(fadeOut, 60, fader, objekt); }
}


//aufruf fade-in zb:
_root.fade("fade1","in",_root.werke["bild_klein1"]);[/AS]
Zitat:
Zitat von projecktx
allerdings wie gesagt ich würds mit einem on enter frame machen wie HW und mit set intevall in functionen hab ich schon schlechte erfahrungen gemacht.
was für schlechte erfahrungen haste denn da gemacht, lass uns doch teilhaben an deinem wissen

naja so, oder so... wenn ich irgendwo das setInterval mal sinvoll einsetzen wollen würde, müßte ich mich wieder mit der problematik auseinandersetzen, also kann man das auch gleich klären, wäre nett wenn ihr euch da mal versucht reinzudenken.
Luchs ist offline   Mit Zitat antworten
Alt 10-09-2004, 10:32   #13 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Ort: Stuttgart
Beiträge: 58
Post ich brauch mal urlaub ;)

Hi jungs, also ich habs dann mal probiert auf HW's weise, auch dort habe ich n problem, da sich nicht verstehe:

Code:
function fadeIn(fader,objekt) { 
	trace("fader: "+fader); 
	trace("obj: "+objekt); 
	trace("obj-a: "+objekt._alpha);
	objekt._alpha+=20;
	//_global.ref = this;//Referenz setzen auf dieses Obj
	_level0.createEmtpyMovieClip("watcher",1);//leeren MC erstellen 
	_level0.watcher.onEnterFrame = function(){//auf diesen MC einen onEnterFrame-Event legen 
			objekt._alpha += 5;	//kontinuierlich den Alphawert des MCs erhöhen 
			trace("Fade in: "+ objekt._alpha); 
			if (objekt._alpha >= 100) {//wenn 100 Prozent erreicht 
				delete _level0.watcher.onEnterFrame;//den onEnterFrame-Event wieder löschen 
				_level0.watcher.removeMovieClip();//und den MC wieder löschen 
				trace("clear Fade in"); 
			}else{ trace("shit"); }
	} 
} 

//aufruf
_root.fadeIn("gross_fade"+i,_root.werke.bild_gross);
der aufruf erfolgt aus einem anderen MC im selben fla.

das macht er noch (an dem richtigen bild) -> objekt._alpha+=20;

das macht er nicht mehr -> trace("Fade in: "+ objekt._alpha);


als trace bekomm ich nur das ->
Code:
fader: gross_fade0
obj: _level0.werke.bild_gross
obj-a: 0

wo ist denn da der fehler?
ich denke das es ned sein düfte, aber sind level0 und _root unterschiedliche "orte"?
Luchs ist offline   Mit Zitat antworten
Alt 10-09-2004, 10:44   #14 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Ort: Stuttgart
Beiträge: 58
ups

wenn man der AS rechtsschreibung ned mächtig ist

fehler beseitigt, hab n buchstabendreher gehabt bei creatEmptyMC

danke trotzdem *g
Luchs ist offline   Mit Zitat antworten
Alt 10-09-2004, 14:02   #15 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Ort: Stuttgart
Beiträge: 58
Unhappy

Also... ich habe jetzt die oberste Variante, die von HW und noch ne dritte mit nem setinterval ausprobiert, alle drei leiden unter der selben symptomatik:

wenn ich sie in ner for schleife aufrufe, laufen se sich tot. wenn ich sie einzeln aufrufe funzen sie bestens.
ich find das escht eijenartig. ich könnte mir vorstellen das da der inhalt der löschvariable für die jeweilige funktion (setinterval, onframeevent,..) überschrieben wird, aber hmm.

*fieps* hilfe?
Luchs 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 13:54 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele