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

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-08-2009, 20:52   #1 (permalink)
Neuer User
 
Registriert seit: Aug 2009
Beiträge: 2
LoadMovie - Preload geht nicht

Hi Leute,

ich hoffe einer von euch kann mir weiterhelfen.

Habe ein Skript erstellt, dass per LoadMovie-Funktion zufällig externe JPG-Bilder laden soll. Der Flash soll letzendlich einfach nur Bilder laden und anzeigen (eine Art kleine Galerie).

Soweit funktioniert auch alles, nur der Preload haut nicht hin. Ich lasse mir die Variablen anzeigen, zuerst jedoch das Skript:

__________________________________________________ ________

stop();
//Zufallszahl generieren; Anzahl der Bilder aus Textdatei laden
var anzahl:LoadVars = new LoadVars();
anzahl.onLoad = function (success:Boolean):Void {
if (success) {
bilderanz = anzahl.bilderanzahl;
// hier Umweg über zweite Variable, um sowohl Zufallszahl wie auch Gesamtzahl der Bilder anzeigen zu können
zufallszahl = random(bilderanz)+1;
// laden eines Bildes (bild1.jpg, bild2.jpg,...)
bild.loadMovie("flashbilder/bild"+zufallszahl+".jpg");
// Preload; Film läuft erst weiter, wenn Bild vollständig geladen
gesamt = int(bild.getBytesTotal());
geladen = int(bild.getBytesLoaded());
if (geladen == gesamt)
{


// Bild, ab dem die Animation startet
gotoAndPlay (30);
}


}

else {
//Fehler anzeigen
gotoAndPlay(5);
}
}
// bilderanzahl.txt enthält die Variable "bilderanzahl", die vorgibt, wieviele Bilder sich im Ordner "Flashbilder" befinden
anzahl.load("/bilderanzahl.txt");

__________________________________________________ ___________


Beim Starten des Films zeigt mir die Variable "gesamt" = 12 Byte (Größe der sfw-Datei), "geladen" ebenso 12 Byte. Die Größe des Bildes (bei mir ca 20kb) wird nicht mit einbezogen. Beim nächsten Durchlauf der Schleife zeigt er mir nun die Größe der sfw+Größe des vorher geladenen Bildes an.

Das soll er aber eigentlich nicht tun. Mit geht es darum, dass der Film erst starten soll, wenn das Bild (für diesen Durchlauf der Schleife) vollständig geladen ist.

Der Fehler muss sich also eigentlich im Fett geschriebenen Teil des Skript finden lassen, ich bin nur einfach zu doof glaub ich ...

Habe auch schon die Hilfefunktion probiert und einige Vorschläge mit "onEnterFrame" gefunden. Aber wenn ich das Versuche, zeigt er mir für die beiden Variablen "gesamt" und "geladen" überhaupt nichts mehr an und der Film startet auch nicht mehr (logo) ...

Kann mir jemand weiterhelfen?

Vielen Dank schonmal ...
myspam ist offline   Mit Zitat antworten
Alt 22-08-2009, 21:38   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Das mit dem kontinuierlichen onEnterFrame-Event wäre aber der richtige Weg, denn dein Preloader wird ja nur genau ein einziges Mal durchlaufen und da wird "gesamt" kaum gleich "geladen" sein, zumindest online nicht. Ein Preloader ist ein kontinuierlicher Event, den man mit einem Intervall oder dem genannten onEnterFrame-Event erreichen kann.

Ein onEnterFrame-Event ist eine Funktion, die solange auf der Stelle "rotiert", bis der Event gelöscht wird. Wenn allerdings der loadMovie im Web nicht funzt - und das kann ja durch eine schlechte Bandbreite oder einem Serverausfall jederzeit passieren - läuft sich die Funktion tot und der Film muss abgebrochen werden. Deshalb wurde ab Flash 8 auch die weitaus stabilere MovieClipLoader-Klasse eingeführt, die damit loadMovie und loadMovieNum ersetzte.

In deinem Fall könntest du einen Preloader wie folgt erstellen:
PHP-Code:
stop();

//Zufallszahl generieren; Anzahl der Bilder aus Textdatei laden
var anzahl:LoadVars = new LoadVars();
anzahl.onLoad = function (success:Boolean):Void {
   if (
success) {
      
_root.bilderanz this.bilderanzahl;
      
// hier Umweg über zweite Variable, um sowohl Zufallszahl wie auch Gesamtzahl der Bilder anzeigen zu können
      
_root.zufallszahl random(_root.bilderanz)+1;

      
// laden eines Bildes (bild1.jpg, bild2.jpg,...)
      
_root.bild.loadMovie("flashbilder/bild"+_root.zufallszahl+".jpg");

      
// Preload; Film läuft erst weiter, wenn Bild vollständig geladen
      
_root.onEnterFrame = function(){//kontinuierlich überprüfen...
         
gesamt int(_root.bild.getBytesTotal());
         
geladen int(_root.bild.getBytesLoaded());
         if (
geladen >= gesamt)
         {
            
//fertiggeladen, Event wieder löschen
            
delete this.onEnterFrame;

            
// Bild, ab dem die Animation startet
            
_root.gotoAndPlay (30);
         }
      }
   }

   else {
      
//Fehler anzeigen
      
gotoAndPlay(5);
   }
}

anzahl.load("/bilderanzahl.txt"); 
  Mit Zitat antworten
Alt 22-08-2009, 22:36   #3 (permalink)
Neuer User
 
Registriert seit: Aug 2009
Beiträge: 2
Hi Holger,

zunächst ma vielen dank für die sauschnelle antwort.

Copy&Paste - Dein Code funktioniert - allerdings das Problem, dass er mir beim Preload immer das anzeigt, was in der vorherigen Schleife geladen wurde, ist immernoch, genauer:

Erste Schleife zeigt 12 Bytes für "BytesLoaded" und für "BytesTotal". Die ca. 20kb, was das Bild groß ist, welches er in dieser Schleife ja bereits geladen hat, zeigt er erst in der darauf folgenden Schleife, und so weiter ...

Habe die Dateien mal hochgeladen, vielleicht kann mans dann einfacher erkennen, was ich meine:

- bildertausch.fla und bildertausch.swf ist meine Version
- bildertausch2.fla und bildertausch2.swf sind die Version mit dem Code von Holger,
- bilderanzahl.txt enhält die Variable, die angibt, wieviele Bilder in dem Ordner flashbilder vorhanden sind
- Ordner flashbilder enthält die dummybilder für den test (hier nur 3 Stück)

Habe extra die sfw's mit rein, vielleicht tritt das Problem ja nur bei mir auf (beim umwandeln???), benutze Flash 8 Pro...

Gruß

Dongamilo

P.S.: Online habe ich die Datei noch nicht ausprobiert...

P.P.S.: noch ne kurze Verständnisfrage: Warum verwendest Du (Holger) "_root.blabla..." so häufig? Ich habe _root eigentlich immer nur verwendet, wenn ich Script in einer Unterebene geschrieben habe und dann etwas in den Hauptfilm zurückgeben wollte. Hat das einen speziellen Grund oder ist das mehr pro forma ?
Angehängte Dateien
Dateityp: zip flashbilder.zip (59,4 KB, 6x aufgerufen)
myspam ist offline   Mit Zitat antworten
Alt 22-08-2009, 23:42   #4 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
Online habe ich die Datei noch nicht ausprobiert...
Na ja, das solltest du aber. Offline sind die Dateien so schnell nachgeladen, dass sich ein Preloader überhaupt nicht lohnt. Teste wenigstens mit dem Bandbreitenprofiler, da kannst du verschiedene Downloadgeschwindigkeiten simulieren.

Zitat:
Warum verwendest Du (Holger) "_root.blabla..." so häufig?
Hab ich hier nur aus Sicherheitsgründen gesetzt, weil ich nicht genau wusste, auf welcher Zeitleiste du das einsetzt. "_root" ist eine absolute Pfadangabe und zeigt einfach nur auf die Hauptzeitleiste.
  Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
extern, loadmovie, onenterframe, preload

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



Alle Zeitangaben in WEZ +1. Es ist jetzt 22:28 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele