Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 25-01-2008, 19:05   #1 (permalink)
Neuer User
 
Registriert seit: Apr 2004
Beiträge: 6
Fade und setInterval Problem

Guten Abend
Ich habe eine Fadefunktion, welche das aktuelle Bild ausblendet und ein neues Bild einblendet. Das ganze für eine variable Anzahl Bilder, welche über PHP aus einem Verzeichnis ausgelesen und über ein Array übergeben werden. Grundsätzlich funktioniert alles aber...
Mit untenstehendem Skript kann ich im setInterval irgendeine Zeitgrösse angeben, das hat keinen Einfluss - die Funktion wird fortlaufend immer wieder ausgeführt. Ich möchte aber bestimmen können wieviel Zeit vergehen soll bis der nächste Fade stattfinden soll.
Ich brauche dringend einen Tip!
Hier die Funktion und der Aufruf derselben:
rein = 0;
raus = 999;
speed = 2;
fade = function (rein, raus, speed) {
this.onEnterFrame = function() {
this["bild"+rein]._alpha +=speed;
this["bild"+raus]._alpha -=speed;
if(this["bild"+rein]._alpha >= 100 && this["bild"+raus]._alpha <=0) {
this["bild"+rein]._alpha = 100;
this["bild"+raus]._alpha = 0;
raus = rein;
if(rein < pic_count - 1){
rein = rein + 1;
} else {
rein = 0;
}
delete this.onEnterFrame;
}
}
}
setInterval(faden(rein, raus, speed), 10000);
lukipilot ist offline   Mit Zitat antworten
Alt 25-01-2008, 19:57   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
Zitat:
Zitat von lukipilot Beitrag anzeigen
Ich möchte aber bestimmen können wieviel Zeit vergehen soll bis der nächste Fade stattfinden soll.
zuerst einmal den funktionsaufruf richtig erstellen (kann man in der flash-hilfe nachlesen),
dann das interval löschen um es mit einer anderen dauer neu zu starten:

function fade(rein, raus, speed) {
clearInterval(this.si);
...
var dauer=13000; // z.b.
this.si=setInterval(this, "fade", dauer, rein, raus, speed);
}
this.si=setInterval(this, "fade", 10000, rein, raus, speed);
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (25-01-2008 um 20:00 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 25-01-2008, 20:16   #3 (permalink)
Neuer User
 
Registriert seit: Apr 2004
Beiträge: 6
Vielen Dank erstmal für Deine Antwort.
Wenn ich das Script nach Deinen Angaben anpasse, dann geht gar nichts mehr, das heisst, nicht einmal das erste Bild wird eingefadet...

Ich habe dann Deinen Input aufgenommen und um Input aus der Flash Hilfe ergänzt - das ist das Resultat:
rein = 0;
raus = 999;
speed = 2;
obj = new Object();
obj.fade = function (rein, raus, speed) {
this.onEnterFrame = function() {
this["bild"+rein]._alpha +=speed;
this["bild"+raus]._alpha -=speed;
if(this["bild"+rein]._alpha >= 100 && this["bild"+raus]._alpha <=0) {
this["bild"+rein]._alpha = 100;
this["bild"+raus]._alpha = 0;
raus = rein;
if(rein < pic_count - 1){
rein = rein + 1;
} else {
rein = 0;
}
//delete this.onEnterFrame;
}
}
}
setInterval(obj, "fade", 10000, rein, raus, speed);

... funktioniert leider auch nicht ...

Weiterer Tip?
lukipilot ist offline   Mit Zitat antworten
Alt 25-01-2008, 20:29   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
*
Angehängte Dateien
Dateityp: zip intervalMX_fla.zip (3,9 KB, 7x aufgerufen)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (25-01-2008 um 20:33 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 25-01-2008, 20:33   #5 (permalink)
Neuer User
 
Registriert seit: Apr 2004
Beiträge: 6
Unerwartetes Dateiformat!
Wahrscheinlich weil ich nur Flash MX habe :-(
lukipilot ist offline   Mit Zitat antworten
Alt 25-01-2008, 20:34   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
hab's gerade geändert
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 25-01-2008, 21:28   #7 (permalink)
Neuer User
 
Registriert seit: Apr 2004
Beiträge: 6
Das Interval wird wie gewünscht aufgerufen, ich sehe jetzt, was das verbleibende Problem ist. Die Variable zählt nicht hoch, daher wird wahrscheinlich immer dasselbe Bild ein- und ausgefadet.

Sorry, aber ich habe das mit den Variabeln noch nie verstanden - weshalb funktioniert das hier nicht, dass die Variable bei jedem Funktionsaufruf um 1 hochgezählt wird?

function fade(rein, raus, speed) {
// testen, dass die funktion aufgerufen wird und ob die variablen ankommen
trace(this+" rein:"+rein+" raus:"+raus+" speed:"+speed);
globale_rein = rein + 1;
//
}
//
// du benützt in fade diese globalen variablen, da du nicht korrekt übergibst.
var globale_rein = 0;
var globale_raus = 999;
var globale_speed = 2;
this.si = setInterval(this, "fade", 1000, globale_rein, globale_raus, globale_speed);
lukipilot ist offline   Mit Zitat antworten
Alt 26-01-2008, 09:45   #8 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
globale_rein = rein + 1;
du führst immer wieder die selbe rechenoperation aus. warum sollte dabei ein anderes ergebnis herauskommen?


so wird der wert von globale_rein um eins erhöht:
globale_rein++;

oder so um einen beliebigen betrag
globale_rein+=12;


deine varinate kann nur gehen, wenn du z.b. rein erhöhst:
globale_rein = rein + 1;
rein+=1;
rein übergibst du in das nächste interval. somit ist es dann um 1 höher.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 26-01-2008, 10:29   #9 (permalink)
Neuer User
 
Registriert seit: Apr 2004
Beiträge: 6
Ich komme mir sehr blöd vor. Es funktioniert auch mit Deinen Schreibweisen nicht. So wie Du schreibst ist meine Variante ungeschickt? Was wäre denn eleganter?
Ich muss ja innerhalb dieser Funktion dafür sorgen, dass beim nächsten Aufruf auch das nächste Bild eingefadet wird...
lukipilot ist offline   Mit Zitat antworten
Alt 26-01-2008, 11:23   #10 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
weiss nicht, was dein problem ist?
du hattest geschrieben ".. Grundsätzlich funktioniert alles ... Ich möchte aber bestimmen können wieviel Zeit vergehen soll bis der nächste Fade stattfinden soll .."

hier das ganze auf ein minimum reduziert, zum besseren verständnis:
Code:
rein = 0;
dauer = 3333;
//
function fade() {
	// besser das interval stoppen, damit es keine überschneidungen gibt
	clearInterval(si);
	// hier deine eigentliche fade-function
	this.onEnterFrame = function() {
		// ...
		delete this.onEnterFrame;
		// wenn das faden fertig ist, dann
		// die globale variable um eins erhöht
		rein++;
		// und auf zum nächsten faden
		si = setInterval(this, "fade", dauer);
	};
}
si = setInterval(this, "fade", dauer);
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (26-01-2008 um 16:31 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 26-01-2008, 16:14   #11 (permalink)
Neuer User
 
Registriert seit: Apr 2004
Beiträge: 6
rein = 0;
raus = 999;
speed = 2;
dauer = 5000;
function fade(rein, raus, speed) {
clearInterval(si);
trace("rein:"+rein+" raus:"+raus+" speed:"+speed);
this.onEnterFrame = function() {
this["bild"+rein]._alpha +=speed;
this["bild"+raus]._alpha -=speed;
if(this["bild"+rein]._alpha >= 100 && this["bild"+raus]._alpha <=0) {
this["bild"+rein]._alpha = 100;
this["bild"+raus]._alpha = 0;
delete this.onEnterFrame;
raus = rein;
if(rein < pic_count-1){
rein++;
} else {
rein = 0;
}
si = setInterval(this, "fade", dauer, rein, raus, speed);
}
}
}
si = setInterval(this, "fade", dauer, rein, raus, speed);

So funktioniert das Ding und ich möchte Dir herzlich für Deine geduldige Hilfe danken!!
lukipilot 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 09:29 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele