[MX 2004] Preloader ausgehebelt wegen zu kleinen Files

luke_the_duke

Erfahrenes Mitglied
Hallo,

ich habe einen simplen Preloader konstruiert, der einen MC, auf den ein loadMovie angewendet wird, via onEnterFrame-Funktion auf getBytesLoaded bzw. getBytesTotal überprüft. Der Zweck davon ist, dass eine Reihe von Bildern nacheinander geladen wird. Wenn ich die ganze Geschichte mit jpeg-Files ab 200kB teste, funktioniert alles tadellos, bei kleineren Files hingegen ist das Bild meist schon vollständig geladen, bevor der Preloader überhaupt ansetzen kann, d.h. die onEnterFrame-Funktion gibt für getBytesLoaded zuerst 0 und dann direkt undefined (sprich, das Bild ist geladen) aus und die Bedingung wird nie erfüllt. Wie kann ich das verhindern?

Gruss
 
Hallo,

ich konnte mein Problem selbst lösen und zwar mit Hilfe der MovieClipLoader-Klasse, die jedoch erst ab FP 7 verfügbar ist, darum
würde mich die Antwort auf obenstehende Frage immer noch interessieren.

Gruss
 
Hi,

mal ne Gegenfrage: Wenn die Bilder so klein sind, dass die Ladezeit weniger als einen Frameaufruf beträgt, wieso brauchst Du dann überhaupt einen Preloader?

Dass getBytesLoaded() nach dem Ladevorgang "undefined" zurückgibt, ist mir allerdings neu (kann es hier aber leider nicht testen).

Gruß

P.S.: Ob ein Bild geladen ist, kannst Du auch anhand der Größe des jeweiligen Containers bestimmen (die sollte dann nicht mehr 0 sein). ;)
.
 
Hallo,

"Grösse" ist im Zusammenhang mit Internet meiner Meinung nach ein sehr relativer Begriff und abhängig von der Verbindungsgeschwindigkeit. Auch wenn ich z.B. für 120kb keine zwei Sekunden brauche, gehe ich davon aus, dass das bei anderen nicht der Fall ist. Und für Dateien zwischen 80 und 180kb finde ich einen Preloader nicht übertrieben.

Was den Container angeht, hast du natürlich recht, ich habe mich eben auch ein bisschen unpräzise ausgedrückt. Ich will den Ladevorgang nicht einfach nur triggern, sondern auch dessen Fortschritt anzeigen lassen und dafür reicht eine blosse boolsche Überprüfung der Container-Grösse natürlich nicht aus.

Gruss
 
Zuletzt bearbeitet:
Hi,

ich sehe immer noch nicht genau das Problem: Bei schnellen Verbindungen ist das Bild schneller geladen als ein Frameaufruf - gut! Bei langsameren Verbindungen wird der Preloader halt angezeigt...

Vielleicht kannst Du mal die .fla (oder einen Dummy) posten - dann kann ich mir ein genaueres Bild von der Problematik machen.

Gruß
.
 
Hallo,

das Problem war, dass ich einen Preloader für Bilder bauen wollte, der die Files nacheinander lädt und bei Bedarf den Status des Ladevorgangs anzeigt. Das hat nicht funktioniert, weil bei schnellen Verbindungen die "geladen"-Bedingung gar nie erfüllt wurde. Wie oben schon erwähnt, konnte ich das Problem mithilfe der MovieClipLoader-Klasse lösen, ich hätte einfach gerne gewusst, wie man das ohne diese Klasse machen kann, da die erst ab Flash 7 verfügbar ist.

Da ich mein Problem aber eigentlich erfolgreich selbst lösen konnte, möchte ich eure/deine Zeit nicht länger verschwenden und markiere diesen Thread als erledigt.

Dank und Gruss
 
Hi,

ich hake trotzdem nocheinmal nach, weil mich das Problem interessiert:
PHP:
var container = this.createEmptyMovieClip("container", 1);

container.loadMovie("einbild.jpg");

this.onEnterFrame = function() {
	trace(container.getBytesLoaded() + " von " + container.getBytesTotal());
	if (container.getBytesLoaded() >= container.getBytesTotal() && container.getBytesLoaded() > 10) {
		trace("fertig");
		delete this.onEnterFrame;
	}
}
Auch wenn das Bild sofort geladen ist, zeigt getBytesLoaded() die korrekte Anzahl Bytes an - und das ggf. bis in alle Ewigkeit. Du solltest allerdings testen, ob die Werte (geladen und gesamt) über 0 liegen, da z.B. getBytesTotal() zunächst auch -1 zurückgeben kann, bis die Dateigröße zur Verfügung steht.

Gruß
.
 

Neue Beiträge

Zurück