bilder nachladen und überblenden - bitte um hilfe

frankso

Grünschnabel
hallo,
ich stehe seit 10 stunden vor einem problem das ich nicht lösen kann. ich möchte von einer webcam die bilder nach ein paar sekunden nachladen. damit es während der ladezeit kein ruckeln gibt soll das bild in einen neuen movieclip geladen werden. leider funktioniert das ganze nicht.

Code:
stop();


var tl = this;
var blende = 5;  
var voriges_bild;  
var bild = 1;  
var bilder = 1;  
//aktualisieren_zeit = setInterval(aktualisieren,6000); 
function aktualisieren() {  //klammer
//clearInterval(aktualisieren_zeit);  

//bild laden
bild++;
var bilder_laden:MovieClipLoader = new MovieClipLoader();
bilder_laden.addListener(aktualisieren_handler);
var bilder:MovieClip = tl.createEmptyMovieClip("webcam"+bild,1);
bilder_laden.loadClip("http://webcam.xxx.info/xxx.jpg?cache="+(new Date().getTime()),bilder);
tl["webcam"+bild]._alpha = 20;
//gotoAndStop(2);


//wenn fehler dann zurück zum anfang nach definierter zeit
var aktualisieren_handler:Object = new Object(); 
aktualisieren_handler.onLoadError = function(target_mc:MovieClip,errorCode:String) {  //klammer
if (errorCode == "URLNotFound") { //klammer
clearInterval(aktualisieren_zeit); 
clearInterval(laden); 
//gotoAndStop(2);  //geht zu bild 2 bei einem fehler
//aktualisieren_zeit = setInterval(aktualisieren,3000);   //war original eingeschalten
}}
} 
 


tl.aktualisieren_laden = function() {  
//gotoAndStop(2);
if (tl["webcam"+bild].getBytesLoaded() >= 4) {  
gesamt = tl["webcam"+bild].getBytesTotal();  
bereits = tl["webcam"+bild].getBytesLoaded();  
prozent = Math.ceil((bereits/gesamt)*100); 
//gotoAndStop(2);

  


if (prozent >= 100) {  
//tl["webcam"+bild]._alpha = 100;  
//voriges_bild._alpha = 0; 
//voriges_bild = tl["webcam"+bild-1];
tl["webcam"+bild]._alpha += blende;  
voriges_bild._alpha -= blende; 
//gotoAndStop(2);


if (tl["webcam"+bild]._alpha >= 70 && voriges_bild._alpha <= 0) {  

//voriges_bild.unloadMovie();  
voriges_bild = tl["webcam"+bild];  
//clearInterval(aktualisieren_laden);
//gotoAndStop(2);
//aktualisieren_zeit = setInterval(aktualisieren,6000); 
aktualisieren();
//bild++;  
}}}

}
   

laden = setInterval(aktualisieren_laden,100);  

aktualisieren();
 
Hallo und willkommen bei Tutorials.de,
1. lies die Nettiquette
2. formatier mal deinen Code mit einschüben und so, das ist ja die Hölle das zu lesen. Dann ein paar Erklärungskommentare helfen dir beim Fehler finden und uns beim Nachvollziehen deines Codes. So Sachen wie "}}}" sind nen Grund für die Guillotine, hab ich gehört.
3. Liegt der Flashfilm denn auch auf deiner "webcam.xxx.info"?
4. Das ist ein absoluter Griff ins Blaue da ich den Code kaum testen kann, aber so in der Art sollte es gehen:

Code:
stop();
var tl = this;
var blende = 5;
var voriges_bild;
var bild = 1;
var bilder = 1;
//aktualisieren_zeit = setInterval(aktualisieren,6000); 
function aktualisieren() {
	// Bild einladen
	bild++;
	var bilder_laden:MovieClipLoader = new MovieClipLoader();
	bilder_laden.addListener(aktualisieren_handler);
	var bilder:MovieClip = tl.createEmptyMovieClip("webcam"+bild, 1);
	bilder_laden.loadClip("http://webcam.xxx.info/xxx.jpg?cache="+(new Date().getTime()), bilder);
	tl["webcam"+bild]._alpha = 20;
	//wenn fehler dann zurück zum anfang nach definierter zeit
	var aktualisieren_handler:Object = new Object();
	aktualisieren_handler.onLoadError = function(target_mc:MovieClip, errorCode:String) {
		if (errorCode == "URLNotFound") {
			clearInterval(aktualisieren_zeit);
			clearInterval(laden);
		}
	};
	aktualisieren_hander.onLoadComplete = function(target_mc:MovieClip) {
		laden = setInterval(aktualisieren_laden, 100);
	};
}
tl.aktualisieren_laden = function() {
	tl["webcam"+bild]._alpha += blende;
	voriges_bild._alpha -= blende;
	//gotoAndStop(2);
	if (tl["webcam"+bild]._alpha>90 && voriges_bild._alpha<1) {
		voriges_bild = tl["webcam"+bild];
		aktualisieren();
	}
};

Im Extremfall kann man statt Intervallen auch einen onEnterFrame nehmen, den fand ich bisher immer einfacher zu handlen.

Gruß
jens
 
Hallo Jens,
danke für deine Hilfe.
Die Bilder liegen auf der selben Domain. Leider sehe ich bei dem abgeändertem Script gar kein Bild. Ich habe auch versucht den Pfad weg zu lassen und das Bild dann Lokal aufzurufen. Irgend wie ist da noch ein Fehler begraben. Sorry für meine Formatierung vom Code, ich habe noch nicht so viel Erfahrung mit Flash.

Lg

Frank
 
Ich hatte mich auch vertippt - hander statt handler:

Code:
aktualisieren_handler.onLoadComplete = function(target_mc:MovieClip) {
		laden = setInterval(aktualisieren_laden, 100);
	};

Geht es damit?
 
Hi,
danke für die schnelle Antwort. Den Fehler habe ich geändert, die Funktion rufe ich per aktualisieren(); ganz unten auf und oben habe ich den Intervall von 6 Sekunden aktiviert. Das Problem ist dass das beim nachladen des Bildes kurz ein weißer Flackern entsteht. Genau diesen Fehler habe ich nie gefunden. Genau das Problem hab ich auch mit dem Laden vom Bild - wenn das Bild nicht fertig geladen ist dann sollte die Funktion aktulisieren() so lange warten bis die IF Schleife (alpha >90) fertig ist.

Lg

Frank
 
die Funktion rufe ich per aktualisieren(); ganz unten auf

Welce Funktion? Dir ist schon klar, dass dieser Codeblock
Code:
aktualisieren_handler.onLoadComplete = function(target_mc:MovieClip) {
		// Hiho
	};
exakt dann getriggert wird, wenn das Bild fertig eingeladen ist? Wie willst du feststellen, dass fertig geladen wurde, anhand eines alpha-Wertes?

Gruß
jens
 
Hi,
okay - jetzt habe ich wieder dazugelernt.
Aber warum wird die Function aktualisieren_laden nicht gestartet?
Ich sehe immer nur das geladene Bild mit Alpha = 20 und dann ein Flackern?
 
Poste bitte noch einmal den gesaten Code, den du verwendest. Oder hast du meinen (bis auf den einen Fehler) nicht verändert?

Gruß
.
 
Hi Jens,
ich habe den Code etwas abgeändert.Die Var voriges Bild habe ich gesetzt weil beim ersten durchlauf dieser Wert nicht gesetzt ist. Wenn ich ganz am Anfang voriges_bild._alpha == 1; setze, dann bleibt das Script ganz hängen. Darf das sein, dieser Wert sollte doch beim 2. Durchlauf neu geschrieben werden?

Ich glaube dass das Script bei der Ladeüberprüfung hängen bleibt. Ich habe einen trace("Okay"); eingebaut der nicht ausgegeben wird.

Code:
stop();
var tl = this;
var blende = 5;  // überblendungszeit
// var voriges_bild;
var voriges_bild = webcam1;
var bild = 2;
var bilder = 1;

aktualisieren_zeit = setInterval(aktualisieren,6000); 

function aktualisieren() {
	// Bild einladen
	bild++;
	var bilder_laden:MovieClipLoader = new MovieClipLoader();
	bilder_laden.addListener(aktualisieren_handler);
	var bilder:MovieClip = tl.createEmptyMovieClip("webcam"+bild, 1);
	//bilder_laden.loadClip("xxx.jpg", bilder);
	bilder_laden.loadClip("http://webcam.xxx.info/xxx.jpg?cache="+(new Date().getTime()), bilder);
	
	tl["webcam"+bild]._alpha = 20;
	//wenn fehler dann zurück zum anfang nach definierter zeit
	var aktualisieren_handler:Object = new Object();
	aktualisieren_handler.onLoadError = function(target_mc:MovieClip, errorCode:String) {
		if (errorCode == "URLNotFound") {
			clearInterval(aktualisieren_zeit);
			clearInterval(laden);
		}
	};
	//wenn bild fertiggeladen dann funktion aktualisieren laden
	aktualisieren_handler.onLoadComplete = function(target_mc:MovieClip) {
		laden = setInterval(aktualisieren_laden, 100);
                   trace("Okay"); //wird nicht ausgelöst
    	};
	}
//ein- und ausblenden der bilder	
tl.aktualisieren_laden = function() {
	tl["webcam"+bild]._alpha += blende;
	voriges_bild._alpha -= blende;
	//voriges bild wird neu definiert
	voriges_bild = tl["webcam"+bild];
	if (tl["webcam"+bild]._alpha>90 && voriges_bild._alpha<1) {
		voriges_bild = tl["webcam"+bild];
		// entladen des alten filmes
		voriges_bild.unloadMovie();  
		aktualisieren();
	}
};
 
Hey

trace Befehle werden nur ausgelöst, wenn man lokal auf seinem Rechner innerhalb der Entwicklerumgebung von Flash funktionen testet - deine Dateien können nur geladen werden, wenn die swf sich auf dem selben Server wie die Bilder befinden. Siehst da einen Konflikt? :)

Wie testest du den Script? Was GENAU funktioniert denn nicht? Wieso rufst du aktualisieren() an 2 verschiedenen Stellen auf?

Gruß
jens
 

Neue Beiträge

Zurück