moviecliploader als preloader

Stardusy

Grünschnabel
Hi,

ich hoffe man kan mir hier weiter helfen, und zwar versuche ich mit der MovieClipLoader-Klasse eine preloader zu bauen.
PHP:
var preloader_mcl = new MovieClipLoader();//new instance of MovieClipLoader 
preloader_mcl.addListener(this); 
var imgArray:Array = ['img1.jpg', 'img2.jpg', 'img3.jpg']; 

for (i=0; i+1 <= this.imgArray.length; i++){ 
    trace(i); 
    preloader_mc.duplicateMovieClip("preloader_mc"+i, i); 
    preloader_mcl.loadClip(imgArray[i], "preloader_mc"+i);      
    } 


preloader_mcl.onLoadProgress = function (targetMC, loadedBytes, totalBytes) { 
    this.externLoadedBytes = loadedBytes; 
    this.externTotalBytes = totalBytes; 
    trace(this.externLoadedBytes); 
    trace(this.externTotalBytes); 
    }

Nun will ich die gesamten zu ladenden und geladenen Bytes in einer Variable speichern um dann mit einer Standard onEnterFrame Funktion die geladenen Prozent zu ermitteln.

Kann ich durch einen Moviecliploader laufen zu lassen?

Danke bereits mal im Vor(r)aus!
 
Hi,

meinst Du den Ladefortschritt a) der ersten Datei, b) aller Dateien einzeln, oder c) insgesamt für alle Dateien?

Bitte werde etwas genauer.

Übrigens:
Code:
preloader_mcl.loadClip(imgArray[i], "preloader_mc"+i);
Damit verwendest Du für jeden MovieClip den selben Loader, was dazu führt, dass bestenfalls die letzte Datei geladen wird ...

Gruß
.
 
Danke für deine Antwort!
Ja mit
PHP:
preloader_mcl.loadClip(imgArray[i], "preloader_mc"+i);
gehe ich immer über einen MCL aber alle Dateien werden richtig geladen. Das einzige Problem ist, dass jedoch nur die Daten des letzten Bildes im Preloader verwendet werden.

Ich würde gerne in meinem Preloader den Ladefortschritt aller Dateien anzeigen. Also Antwort c.
 
Hi,

probiers mal so:
Code:
var imgArray:Array = ['img1.jpg', 'img2.jpg', 'img3.jpg']; 

for (i=0; i<this.imgArray.length; i++){ 
    ct[i] = this.createEmptyMovieClip("ct" + i, i);
    var img = ct[i].createEmptyMovieClip("img", 1);
    ct[i].lst = new Object();
    ct[i].lst.onLoadProgress = function(src, l, t) {
        trace("Objekt" + src);
        trace(l + " von " + t + " Bytes geladen");
    }
    ct[i].loader = new MovieClipLoader();
    ct[i].loader.addListener(ct[i].lst);
    ct[i].loader.loadClip(imgArray[i], img);      
}
Wenn es Dir darum geht, aus allen Bildern einen "Durchschnitt" zu berechnen, such mal im Forum nach "Multiloader" - unter dieser Bezeichnung habe ich hier mehrere Ansätze gepostet.

Gruß
.
 
Hi,

probiers mal so:
Code:
var imgArray:Array = ['img1.jpg', 'img2.jpg', 'img3.jpg']; 

for (i=0; i<this.imgArray.length; i++){ 
    ct[i] = this.createEmptyMovieClip("ct" + i, i);
    var img = ct[i].createEmptyMovieClip("img", 1);
    ct[i].lst = new Object();
    ct[i].lst.onLoadProgress = function(src, l, t) {
        trace("Objekt" + src);
        trace(l + " von " + t + " Bytes geladen");
    }
    ct[i].loader = new MovieClipLoader();
    ct[i].loader.addListener(ct[i].lst);
    ct[i].loader.loadClip(imgArray[i], img);      
}
Wenn es Dir darum geht, aus allen Bildern einen "Durchschnitt" zu berechnen, such mal im Forum nach "Multiloader" - unter dieser Bezeichnung habe ich hier mehrere Ansätze gepostet.

Gruß
.

@Tobias Menzel es hat bei mir etwas gedauert... hatte das Problem vorerst anders gelöst!
Aber nun wollte ich doch nochmal einen Blick darauf werfen und verstehe deine code nicht ganz! Er funktioniert bei mir auch zudem nicht...:rolleyes:

Kannst du ihn evtl. mal bei dir testen oder mir erklären wie der teil bei
Code:
onLoadProgress
gehen soll?

THX
Star
 
Hi,

Er funktioniert bei mir auch zudem nicht...
wie schön wäre es, wenn die Leute z.B. auch die entsprechende Fehlermeldung angeben würden (oder - im Falle keiner Meldung - beschreiben, wie sich der Fehler äussert). ;)

Das einzige, was in dem Code - so wie er da steht - fehlt, ist die Deklaration des Arrays "c". Probiers mal so:
Code:
var ct = new Array();

for (var i=0; i<imgArray.length; i++){ 
	ct[i] = this.createEmptyMovieClip("ct" + i, i);
	var img = ct[i].createEmptyMovieClip("img", 1);
	ct[i].lst = new Object();
	ct[i].lst.onLoadProgress = function(src, l, t) {
		trace("Objekt" + src);
		trace(l + " von " + t + " Bytes geladen");
	}
	ct[i].loader = new MovieClipLoader();
	ct[i].loader.addListener(ct[i].lst);
	ct[i].loader.loadClip(imgArray[i], img);	  
}
"onLoadProgress" ist ein Listener für das MovieClipLoader-Objekt, der aufgerufen wird, wenn sich am Ladestatus etwas ändert (sprich: Daten geladen werden). Näheres kannst Du der Dokumentation unter "MovieClipLoader.onLoadProgress" entnehmen.

Gruß
.
 
wie schön wäre es, wenn die Leute z.B. auch die entsprechende Fehlermeldung angeben würden (oder - im Falle keiner Meldung - beschreiben, wie sich der Fehler äussert).

in der Tat! Sorry, shame on me!

Das deklarieren von:
Code:
var ct = new Array();
hat geholfen!
Ich frage mich nur noch, wo zu Du die Variable
Code:
var img = ct[i].createEmptyMovieClip("img", 1);
und den leeren Clip erzeugst!?
Geht doch auch ohne oder nicht...?
Alle
Code:
onLoad
und
HTML:
loadClip
Funktionen gehen auch so.

Für jedes bild wird doch ohnehin bei
Code:
ct[i] = this.createEmptyMovieClip("ct" + i, i);
in der Schleife ein neues level bzw. eine neue Ebene erzeugt.
Wäre es evtl. andersherum besser, wenn man z.B. alles in einen Clip packt und dort leere Clips reinhaut?

Sonst hoffe ich alles verstanden zu haben.

Noch mal Danke!
Stardusy
 
Hi,

1. Der MC "img" (wovon es in jedem MC im Array ct einen gibt) dient zur Aufnahme des eigentlichen Bildes. Da die einzelnen MovieClipLoader Member (Elemente) der ct-MCs sind, würdest Du sie durch die Ladeaktion überschreiben. Also brauchst Du eine Struktur wie diese:
Code:
ct[0]
 |- lst [ Listener]
 |- loader [ MovieClipLoader ]
 |- img [ Clip, in den das Bild geladen wird ]

ct[1]
 |- lst [ Listener]
 |- loader [ MovieClipLoader ]
 |- img [ Clip, in den das Bild geladen wird ]

...

2.
Für jedes bild wird doch ohnehin bei
Code:
ct[i] = this.createEmptyMovieClip("ct" + i, i);
in der Schleife ein neues level bzw. eine neue Ebene erzeugt.
Wäre es evtl. andersherum besser, wenn man z.B. alles in einen Clip packt und dort leere Clips reinhaut?
Nein, damit wird für jedes Bild ein neuer MovieClip erstellt. "Ebenen" gibt es zur Laufzeit ohnehin nicht, und Stufen kannst Du keine zusätzlichen erzeugen - nur ansprechen.

Gruß
.
 
Zurück