| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Mar 2004
Beiträge: 53
| preloader läd zeigt nur 4 kb an, film läuft trotzdem weiter
Hallo zusammen, nachdem ich nun einige tage in das finden und modifizieren eines einfachen universellen prealoaders für das importieren externer bilder/filme in meinem flashfilm gesucht habe, bin ich gestern fündig geworden. Das ganze getestet und gejubelt. So, pustekuchen. Ich hab das ganze jetzt auf mein neues projekt übertragen und der preloader läd irgendwie nicht das, was er laden soll. Zusammenfassung des Projektes: am anfang des films wird ein externes bild geladen. Der pfad des Bildes kommt aus einer php datei. Logischer weise soll der Film erst abspielen, wenn das bild geladen ist, sonst setzt es mitten in der animation ein. hier der Code: Code: // --- variablen einlesen einlesen BG
// variblen in loader verwenden ggf. als _root variable festlegen
var loader_bg:LoadVars = new LoadVars();
loader_bg.onLoad = function(test_bg) {
if (test_bg) {
// direktes verwenden der variablen
bgimage.loadMovie(this.php_bildpfad_bg);
} else {
// nur fehlerausgabe, wenn datei nicht geladen
trace('Konnte php-script nicht finden');
}
};
// hier die Datei, aus der die Variablen ausgelesen werden
loader_bg.load("header_background.php");
stop();
//Auf der Hauptzeitleiste wird eine onEnterFrame Funktion aufgerufen
//Das bewirkt das der Code in { } mit eingestellten Bildrate wiederholt wird
//Hier also 25x pro Sekunde
this.onEnterFrame = function(){
//die Variable geladen gibt an wieviele Bytes bereits geladen wurden
geladen = this.bgimage.getBytesLoaded();
//die Variable gesamt gibt an wieviele Bytes der Film beinhaltet
gesamt = this.bgimage.getBytesTotal();
//die Variable prozent gibt an wieviel Prozent bereits geladen wurden
prozent = geladen * 100 / gesamt;
//In das dynamische Textfeld mc_prozent wird der Text geschrieben der nach = folgt
//Da die Variable prozent eine hässliche lange Nachkommazahl ergeben würde runden wir
//Die Ausgabe ist also die Variable prozent und es wird der Text % geladen angefügt
mc_prozent.text = Math.round(geladen)+"kb / "+gesamt+"kb";
//Nun wird der Ladebalken dynamisch vergrößert
//Der Ladebalken ist 2*prozent breit. Das heißt wenn z.B. 45 Prozent geladen sind
//ist der Ladebalken 90 Pixel breit. Die max. Breite ist also 200 Pixel
mc_ladebalken._width = prozent*2;
//Wenn nun die geladenen Bytes größer oder gleich den gesamt zu ladenden Bytes sind
//dann wird in Bild 2 gesprungen, wo der Film anfängt und die onEnterFrame Funktion
//gelöscht
if(geladen >= gesamt) {
// this.play();
this.gotoAndPlay(5);
delete this.onEnterFrame;
}
} Wie schon gesagt, der film spielt ab, aber ohne das der preloader wirklich die größes des bildes läd, sondern halt nur 4k. bitte bitte keine links auf den schönen prealoader hier im forum, da habe ich nämlich auch schon geschaut und der funkctioniert bei mir auch nicht ... mir wäre (auch vom verständnis) sehr geholfen, wenn ihr mir helfen könntet diesen Preloader hier zum laufen zu bekommen. Danke schonmal für eure mühen |
| | |
| | #2 (permalink) |
| Gast
Beiträge: n/a
|
Du hast anscheinend die Abläufe mit asynchronen Befehlen in Flash noch nicht richtig verstanden. Dein Script wird nämlich von oben durchlaufen, der load-Befehle gestartet, aber das Script gleich weiter abgearbeitet. D.h. dein onEnterFrame-Event wird schon mal durchlaufen, ohne dass in bgimage sich etwas tut. Irgendwann später löst dann der Response den onLoad-Callback der LoadVars-Klasse aus... Einige Abläufe solltest du also ändern: zuerst einmal setz einen sendAndLoad statt nur eines load-Befehls. Dann starte den Preloader erst wenn du im onLoad-Callback den loadMovie-Befehl sicher gestartet hast, bspw.: PHP-Code: |
|
| | #3 (permalink) |
| Neuer User Registriert seit: Mar 2004
Beiträge: 53
|
wow, ich mußter erstmal denken. weil wie gesagt. hab nicht viel mit actionscript gemacht bisher. Habe mein Script genommen und nochmal umgeschrieben. Demnach macht mein script jetzt folgendes: 1) es setzt eine neue instanz lv in die per send and load die variablen geladen werden. 2) es wird ein Callback gesetzt, damit wir wissen, das geladen wurde 3) wir lesen die variablen aus und checken, ob die php datei geladen werden konnte 4) anschließend rufen wir die funktion preloader auf 5) preloader schaut nach, wieviel geladen wurde und wenn sie durchgelaufen ist, gehts weiter. richtig? ABER! Wieso wird preloader nicht automatisch aufgerufen, so wie die funktion test. das wäre dann ja auch ungut, weil eventuell das einladen des bildes in test noch nicht abgeschlossen wäre, oder? hier mein script: PHP-Code: Geändert von nightchase (25-08-2006 um 12:36 Uhr) |
| | |
| | #4 (permalink) | |
| ................ Registriert seit: Jun 2004
Beiträge: 15.890
| Zitat:
__________________ ternärer Konditionaloperator +++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++ | |
| | |
| | #6 (permalink) |
| ................ Registriert seit: Jun 2004
Beiträge: 15.890
|
Hmm... Vielleicht mal nicht geladen nennen (gibt ja auch eine Variable, die so heißt). Wird denn das Bild angezeigt?
__________________ ternärer Konditionaloperator +++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++ |
| | |
| | #8 (permalink) |
| Neuer User Registriert seit: Mar 2004
Beiträge: 53
|
Ok, hab noch einen fehler gefunden. Das ganze läuft jetzt. ABER wieder das gleiche problem wie ganz am anfang. er wartet nicht, bis das bild in den movieclip geladen wurde, sondern geht direkt los. hier der neue code. habe unten den aufruf der ladetestfunktion korregiert. Aber mehr finde ich einfach nicht, ich verzweifle hier PHP-Code: |
| | |
| | #10 (permalink) |
| Gast
Beiträge: n/a
|
Das Problem bei einem onEnterFrame-Event ist halt, dass vor einem Framewechsel zwar der nachzuladenden Film bytemäßig im Cache liegt, der Ziel-MC aber evtl. noch gar nicht befüllt ist. Wenn der Preloader dann genau bei diesem Framewechsel abgebrochen wird, kann der MC in diesem Frame auch nichts anzeigen, frühestens im nächsten Frame wird er gezeichnet. Andererseits gibt es auch Fälle, wo ein Film nachgeladen wird, der MC aber keine "Größe" bekommt. Da muss man dann sogar auf die Abfrage der Höhe/Breite des MCs verzichten, weil die if-Abfrage im onEnterFrame-Event sonst nie wahr wird... |
|
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |