• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > Flash Einsteiger

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 11-03-2010, 11:09   #1 (permalink)
Neuer User
 
Registriert seit: Mar 2009
Beiträge: 13
flash preloader für html problem

Ich eröffne mal hier den thread nochmal, wo ich denke dass es thematisch besser passt, sorry.. ich habe schon viel gegoogelt konnte jedoch nicht wirklich eine antwort finden.
also ich bastele gerade an einem preloader rum, welches dazu dienen soll einige swf-dateien vorzuladen und gleichzeitig einen balken anzuzeigen, anschliessend soll es zu einer url übergehen. da ich auf der webseite html und flash gemischt habe kann ich nicht preloader für die ganze seite machen.
auf jeden fall sieht mein script folgerndermassen aus, welches ich aus verschiedenen quellen genommen habe:

Code:
// Init Preloader
function initPreloader() {	
	filmArray = ["about.swf", "menu.swf"]; 
		anzahl = filmArray.length;
	for (var i = 0; i < anzahl; i++) {
		this.createEmptyMovieClip("content"+i, i);
		loadMovie(filmArray[i], "content" + i);
		this["content" + i]._y = 10000;
	}
	loader_mc.brahmen_mc._width = 200;
}

// Preloader (Totalpreloader)
function preloader() {
	var geladen = 0, gesamt= 0,	prozent = 0;
	for (var j = 0; j < anzahl; j++) {
		geladen += this["content" + j].getBytesLoaded();
		gesamt += this["content" + j].getBytesTotal();		
	}	
	prozent = Math.round((geladen/gesamt) * 100);
	if(preloader_MC is MovieClip){
		preloader_MC.gotoAndStop(prozent);
	}
	if (prozent == 100) {
		
		for (var k = 0; k < anzahl; k++) {
			removeMovieClip("content" + k);	
		
		}		
		delete this.onEnterFrame;	
		getURL("home.html", "_self");	
	}
}




// LadeClips (Seperat)
function ladeClips() {	
	for(var l = 0; l < anzahl; l++) {
		this.createEmptyMovieClip("content"+l, l);		
		loadMovie(filmArray[l], "content" + l);		
	}
	// Optional	
	delete anzahl;
	delete filmArray;	
	delete initPreloader;
	delete Preloader;
	delete ladeClips;
	loader_mc.unloadMovie();
}

// Preloader ausführen
this.initPreloader();

this.onEnterFrame = function() {
	this.preloader();	
}
stop();

mein problem ist es, wie kann ich angeben, dass 1.) im hintergrund diese externen swf-dateien geladen werden, während 2.) der ladebalken zu ende durchläuft und dann sich die gewünschte url öffnet?

ich hoffe dass mir jemand helfen könnte!
mairu ist gerade online Beitrag melden Beitrag bearbeiten/löschen
mairu ist offline   Mit Zitat antworten
Alt 11-03-2010, 19:35   #2 (permalink)
Neuer User
 
Registriert seit: Mar 2009
Beiträge: 13
ich habe das nun etwas geändert und hoffe dass ich mein problem verständlicher rüberbringen kann bzw dass jemand vielleicht einen rat weiss..

einige swf sollen im hg laden, während der ladebalken mc mit 100 frames den fortschritt anzeigt, danach geht es zu dem nächsten clip weiter, dazu der code:
Code:
/ Init Preloader
function initPreloader() {	
	filmArray = ["menu.swf", "about.swf"]; 
	intro_mc._visible = false;
	anzahl = filmArray.length;
	for (var i = 0; i < anzahl; i++) {
		this.createEmptyMovieClip("content"+i, i);
		loadMovie(filmArray[i], "content" + i);
		this["content" + i]._y = 10000;
	}
	}
also um die dateien zu laden, und den intro-clip unsichtbar zu machen..

Code:
// Preloader (Totalpreloader)
function preloader() {
	var geladen = 0, gesamt= 0,	prozent = 0;
	for (var j = 0; j < anzahl; j++) {
		geladen += this["content" + j].getBytesLoaded();
		gesamt += this["content" + j].getBytesTotal();		
	}	
	prozent = Math.round((geladen/gesamt) * 100);
Code:
	if (ladebalkenMC is MovieClip){
	ladebalkenMC.gotoAndStop(prozent);
	  };
if (prozent == 100) { intro_mc._visible = true; for (var k = 0; k < anzahl; k++) { removeMovieClip("content" + k); } delete this.onEnterFrame; } }
dazu zeigt er mir immer fehlermeldung, dass ein "(" und "}" bei dem abschnitt
Code:
	if (ladebalkenMC is MovieClip){
	ladebalkenMC.gotoAndStop(prozent);
	  };
falsch sind, obwohl derselbe script woanders ohne fehler läuft
in der theorie verstehe ich das so, dass der clip frame nach frame, je nach der grösse der heruntergeladenen bytes ablaufen soll, bis 100 % erreicht sind. in der praxis macht er das aber nicht..

Code:
function ladeClips() {	
	for(var l = 0; l < anzahl; l++) {
		this.createEmptyMovieClip("content"+l, l);		
		loadMovie(filmArray[l], "content" + l);		
	}
	// Optional	
	delete anzahl;
	delete filmArray;	
	delete initPreloader;
	delete Preloader;
	delete ladeClips;
	ladebalkenMC.unloadMovie();
}

// Preloader ausführen
this.initPreloader();

this.onEnterFrame = function() {
	this.preloader();	
}
stop();
ist dieser weg total falsch? ich hoffe sehr auf eure hilfe!!
mairu ist offline   Mit Zitat antworten
Alt 11-03-2010, 21:27   #3 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
loadMovie und ein onEnterFrame-Event sind technisch veraltet. Nimm besser eine MovieClipLoader-Instanz:
PHP-Code:
var index:Number 0;
var 
urls:Array = new Array("film1.swf""film2.swf");//etc
var targets:Array = new Array();
var 
picAnzahl:Number urls.length;

//MCs erstellen
for(var i:Number=0;i<picAnzahl;i++){
    
this.targets.push(this.createEmptyMovieClip("con"+(i+1),(i+1)));
}

//Listener erstellen
var mclListener:Object = new Object();
var 
mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(mclListener);

//und ersten Film mit loadClip laden
mcLoader.loadClip(urls[index], targets[index]);

//während des Ladens bspw. um Ladebalken o.ä. zu aktualisieren
mclListener.onLoadProgress = function(target:MovieClipbytesLoaded:NumberbytesTotal:Number):Void {
    var 
prozent int(bytesLoaded*100/bytesTotal);
    
_root.ladebalkenMC.gotoAndStop(prozent);

}

//Laden fertig, MC ist befüllt
mclListener.onLoadInit = function(mc:MovieClip) {
   
index++;
   if (
index urls.length) {//nächster
       
mcLoader.loadClip(urls[index], targets[index]);
   }
   else{
//letzter geladen
      
getURL("home.html""_self");
   }

  Mit Zitat antworten
Alt 11-03-2010, 22:25   #4 (permalink)
Neuer User
 
Registriert seit: Mar 2009
Beiträge: 13
wow danke schön für die antwort, der ladebalken funktioniert nun super!
ich habe jedoch noch ein paar verständnis fragen und zwar zu dem hier:
Code:
//und ersten Film mit loadClip laden
mcLoader.loadClip(urls[index], targets[index]);
könnte man das so machen dass die filme nicht abgespielt werden sondern man einfach zu dem nächsten frame mit einem gewünschten MC rübergeht?
bzw bis auf das hier :
Code:
 else{//letzter geladen
      getURL("home.html", "_self");
   }
nichts weiteres passiert

ich wollte eigentlich dass sie einfach nur ins cache geladen werden, damit's im browser bleibt, da die seite hauptsächlich aus html besteht und ich keine andere methode fand um die swf's vorzuladen..

Geändert von mairu (11-03-2010 um 22:29 Uhr)
mairu ist offline   Mit Zitat antworten
Alt 11-03-2010, 23:34   #5 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
könnte man das so machen dass die filme nicht abgespielt werden sondern man einfach zu dem nächsten frame mit einem gewünschten MC rübergeht?
Dann mach den Ziel-MC transparent und setz im onLoadInit auf den mc ein stop.
PHP-Code:
...
//MCs erstellen
for(var i:Number=0;i<picAnzahl;i++){
    
this.targets.push(this.createEmptyMovieClip("con"+(i+1),(i+1)));
    
this["con"+(i+1)]._alpha 0;//oder _visible=false;

...
//Laden fertig, MC ist befüllt
mclListener.onLoadInit = function(mc:MovieClip) {
   
mc.stop();//nicht abspielen, nur stoppen
   
index++;
   if (
index urls.length) {//nächster
       
mcLoader.loadClip(urls[index], targets[index]);
   }
   else{
//letzter geladen
      
getURL("home.html""_self");
   }

  Mit Zitat antworten
Alt 12-03-2010, 10:19   #6 (permalink)
Neuer User
 
Registriert seit: Mar 2009
Beiträge: 13
danke für die antwort! der spielt den clip nun wie gewünscht nicht ab, das kleine problem ist nur dass der ladebalken jetzt 2x durchläuft.. ist da irgendwas doppelt?

sieht so aus:
PHP-Code:
var index:Number 0;
var 
urls:Array = new Array("loki.swf""about.swf");//etc
var targets:Array = new Array();
var 
picAnzahl:Number urls.length;

//MCs erstellen
for(var i:Number=0;i<picAnzahl;i++){
    
this.targets.push(this.createEmptyMovieClip("con"+(i+1),(i+1)));
    
this["con"+(i+1)]._alpha 0;//oder _visible=false;
}  

//Listener erstellen
var mclListener:Object = new Object();
var 
mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(mclListener);

//und ersten Film mit loadClip laden
mcLoader.loadClip(urls[index], targets[index]);

//während des Ladens bspw. um Ladebalken o.ä. zu aktualisieren
mclListener.onLoadProgress = function(target:MovieClipbytesLoaded:NumberbytesTotal:Number):Void {
    var 
prozent int(bytesLoaded*100/bytesTotal);
    
_root.ladebalken_mc.gotoAndStop(prozent);

}

//Laden fertig, MC ist befüllt
mclListener.onLoadInit = function(mc:MovieClip) {
   
mc.stop();//nicht abspielen, nur stoppen
   
index++;
   if (
index urls.length) {//nächster
       
mcLoader.loadClip(urls[index], targets[index]);
   }
   else{
//letzter geladen
      
getURL("home.html""_self");
   }

mairu ist offline   Mit Zitat antworten
Alt 12-03-2010, 13:06   #7 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
ist da irgendwas doppelt?
Äh, ja... Zwei Filme werden geladen, siehe das Array...
  Mit Zitat antworten
Alt 12-03-2010, 13:42   #8 (permalink)
Neuer User
 
Registriert seit: Mar 2009
Beiträge: 13
Zitat:
Zitat von agedoubleju Beitrag anzeigen
Äh, ja... Zwei Filme werden geladen, siehe das Array...
oh das stimmt ja, peinlich...
gibt es eigentlich eine möglichkeit dass der ladebalken nur 1x durchläuft sozusagen für die gesamtdateimenge?
PHP-Code:
var prozent int(bytesLoaded*100/bytesTotal); 
das mit einer variablen noch irgendwie multiplizieren?
mairu ist offline   Mit Zitat antworten
Alt 12-03-2010, 15:51   #9 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
gibt es eigentlich eine möglichkeit dass der ladebalken nur 1x durchläuft sozusagen für die gesamtdateimenge?
Nicht direkt, das müsstest du händisch ermitteln und in den Progress einbinden...
  Mit Zitat antworten
Alt 12-03-2010, 18:24   #10 (permalink)
Neuer User
 
Registriert seit: Mar 2009
Beiträge: 13
ahja, das heisst statt bytesTotal schreibe ich wieviel bytes das tatsächlich insgesamt sein sollen? (wie schreibt man das dann richtig?)

EDIT: falsch gedacht .. naja dann werde ich einfach so einen kreispreloader clip machen, der nicht von prozent abhängig sein soll.. dann müsste ich doch das hier:

PHP-Code:
//während des Ladens bspw. um Ladebalken o.ä. zu aktualisieren
mclListener.onLoadProgress = function(target:MovieClipbytesLoaded:NumberbytesTotal:Number):Void {
    var 
prozent int(bytesLoaded*100/bytesTotal);
    
_root.ladebalken_mc.gotoAndStop(prozent);


verändern..? was muss ich dann reinschreiben damit der clip einfach mal läuft bis die sachen fertig geladen sind?
_root.ladebalken_mc.gotoAndPlay(1); ?

dann möchte ich dass das eigentliche intro anfängt, wäre es sinnvoller das als eine neue szene, oder ein neuer frame mit MC anzulegen, gibt es einen unterschied wie lange es dann laden würde?
wenn ich nach meinem preloader schreibe, er soll zu frame2 mit dem intro_mc rübergehen, und danach erst wenn der intro_mc durchgespielt hat die nächste seite öffnen, habe ich hier im forum folgendes script gefunden:
PHP-Code:
onEnterFrame = function () { 
    var 
nr Math.round(intro_mc.playheadPercentage);
    if (
nr == 100) {
        
getURL("home.html""_self");
        
delete onEnterFrame;
    }

welcher jedoch nicht funktioniert.. fehlt irgendwo ein stop? in dem intro_mc selbst habe ich einen stop (); gemacht.. oder soll ich nicht ?

Geändert von mairu (12-03-2010 um 19:38 Uhr)
mairu ist offline   Mit Zitat antworten
Alt 12-03-2010, 20:32   #11 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Du kommst jetzt von Kuchenbacken zu Ar...backen. Wenn du unbedingt so einen Kreispreloader benötigst, starte den bspw. mit einem attachMovie unabhängig vom onLoadProgress (den benötigst du dann ja nicht mehr!) und lösch ihn im onLoadInit. Der onEnterframe den du gefunden hast, ist hier reichlich überflüssig, weil dessen Aufgabe der onLoadProgress-Handler im Hintergrund übernehmen würde. Bei einer vom Ladefortschritt unabhängigen Animation benötigst du den Progress-Handler nicht mehr.
PHP-Code:

this
.createEmptyMovieClip("kreis_mc",2);
this.kreis_mc.attachMovie("kreispreloader","kreispreloader",1);

/*
//während des Ladens bspw. um Ladebalken o.ä. zu aktualisieren
mclListener.onLoadProgress = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void {
    var prozent = int(bytesLoaded*100/bytesTotal);
    _root.ladebalken_mc.gotoAndStop(prozent);

*/

//Laden fertig, MC ist befüllt
mclListener.onLoadInit = function(mc:MovieClip) {
   
mc.stop();//nicht abspielen, nur stoppen 
   
_root.kreis_mc.removeMovieClip();//die Animation wieder löschen
//etc 

Geändert von agedoubleju (12-03-2010 um 20:34 Uhr)
  Mit Zitat antworten
Alt 12-03-2010, 21:35   #12 (permalink)
Neuer User
 
Registriert seit: Mar 2009
Beiträge: 13
okay, uhm.. fertig script sieht dann so aus:
PHP-Code:
var index:Number 0;
var 
urls:Array = new Array("about.swf""menu.swf");//etc
var targets:Array = new Array();
var 
picAnzahl:Number urls.length;

//MCs erstellen
for(var i:Number=0;i<picAnzahl;i++){
    
this.targets.push(this.createEmptyMovieClip("con"+(i+1),(i+1)));
    
this["con"+(i+1)]._alpha 0;//oder _visible=false;
}  

//Listener erstellen
var mclListener:Object = new Object();
var 
mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(mclListener);

//und ersten Film mit loadClip laden
mcLoader.loadClip(urls[index], targets[index]);


this.createEmptyMovieClip("kreis_mc",2);
this.kreis_mc.attachMovie("kreispreloader","kreispreloader",1);


//Laden fertig, MC ist befüllt
mclListener.onLoadInit = function(mc:MovieClip) {
   
mc.stop();
   
//nicht abspielen, nur stoppen
   
index++;
   if (
index urls.length) {//nächster
       
mcLoader.loadClip(urls[index], targets[index]);
   }
   else{
//letzter geladen
      
getURL("home.html""_self");
      
_root.kreis_mc.removeMovieClip();}

stop (); 
so spielt er aber lediglich den kreis ab ;( es tut mir wirklich leid dumme fragen zu stellen aber habe ich jetzt den falschen teil ersetzt?
mairu ist offline   Mit Zitat antworten
Alt 12-03-2010, 22:09   #13 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Sieht so aus als hättest du vergessen, im onLoadInit die _alpha-Eigenschaft des MCs wieder auf 100 zu setzen...
  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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
html preloader problem Dahn HTML und CSS 1 25-03-2008 12:41
Preloader Problem... Flash scheint den ganzen Film vor dem Preloader zu laden kosi Flash MX 2004 4 03-12-2004 19:18
Problem - Preloader & Flashfilm in Html Datei Keiler Flash MX 2004 0 25-01-2004 17:38
Flash preloader für HTML? Gassi HTML und CSS 2 31-01-2003 17:49
Flash-preloader und HTML MichaelW HTML und CSS 3 24-09-2001 23:58


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:40 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele