| |||||||
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) |
| helpQLODhelp Registriert seit: Feb 2002 Ort: Köln
Beiträge: 8.505
| Preloading - The Definitive Guide Hinweis Die LoaderClass hat mittlerweile einige Updates erfahren. Obwohl ich versuche, das Tutorial hier auf dem aktuellen Stand zu halten, solltet ihr euch auf jeden Fall die letzte Version und Dokumentation (im letzten Posting des Threads) anschauen. Preloading - The Definitive Guide - Teil I Wie Colin Moock, der Auto des Buches Actionscript - The definitive guide neulich feststellte, ist das Preloaden nach wie vor eins der groessten Probleme für viele Flasher. Macromedia macht diese Sache aber auch alles andere als einfach. Die unterschiedlichen Schnittstellen zu den verschiedenen Arten von Files (SWF, XML, Text, Sound), das asynchrone Verhalten der Ladefunktionen und die unvollständige Fehlerbehandlung, das alles laesst die Lernkurve steil ansteigen. Deshalb hat Moock eine Petition gestartet und ein neues Interface für die Behandlung von Ladevorgängen vorgestellt. Auf Basis dieser neuen Schnittstelle habe ich eine Klasse Loader entwickelt, die das Preloaden extrem vereinfacht und und für alle Arten von Dateien vereinheitlicht. Alle Theorie ist grau, deshalb möchte ich hier ein paar Beispiele vorstellen, die die neue Klasse Loader in der Praxis zeigen. Zum Ausprobieren brauchst du nur Flash MX und die Include-Datei mit der Definition der Klasse, die du hier herunterladen kannst. Falls du Fragen oder Anregungen habt, dann poste die bitte in diesem Thread. Als erstes ein sehr einfaches Beispiel: Wir laden eine SWF in einen vorhandenen MovieClip ActionScript:
Hier sieht man schon die wichtigsten Teile eines Preloaderscriptes. Als erstes muss die neue Klasse "LoaderClass" verfuegbar gemacht werden. Das erreichen wir durch das #include. Diese Anweisung macht nichts anderes, als Flash mitzuteilen, dass es beim Uebersetzen des Films den Text der angegebenen Datei an dieser Stelle einfuegen soll. Auf die Art muss man nicht immer wieder den ganzen Sourcecode von Fla zu Fla kopieren, sondern es reicht, die .as-Datei ins gleiche Verzeichnis wie die Fla zu legen. Als nächstes erzeugen wir ein neues Loader-Objekt. Das ist die Basis unseres Preloaders. Zum Schluss starten wir das Laden durch den Aufruf von load. Dieser Preloader macht allerdings noch nicht viel mehr, als ein einfacher Aufruf von loadMovie. Im Unterschied zu loadMovie kann man allerdings hier genausogut einen Sound, eine XML-Datei oder eine LoadVars-Datei laden. Du musst dann natürlcih anstatt eines MovieClips das entsprechende Objekt also z.B. ein Soundobjekt übergeben. Wenn man als ersten Parameter eine Zahl übergibt, kann man auch MovieClips direkt auf das entsprechende Level laden. Ausserdem kann man auch direkt mehrere Ladevorgänge starten, die dann nacheinander abgearbeitet werden. Aber dazu später mehr. Um den Preloader etwas attraktiver zu machen, fügen wir mal eine Anzeige für den Ladevorgang hinzu, den beliebten Ladebalken. Der Ladebalken ist ein einfacher MovieClip auf der Bühne, der durch Skalieren zwischen 0 und 100 anzeigt, wieviel Prozent des Films geladen sind. ActionScript:
Das sieht schon besser aus. Auch hier gilt wieder: Alle anderen Dateitypen können auf genau die gleiche Weise geladen und deren Ladefortschritt angezeigt werden. Mehrfache Aufrufe von load werden schön geordnet hintereinander weg ausgeführt und angezeigt. Im nächsten Posting geht es weiter ...
__________________ Ralf Bokelberg™ - Flex & Flash Consulting |
| | |
| | #2 (permalink) |
| helpQLODhelp Registriert seit: Feb 2002 Ort: Köln
Beiträge: 8.505
|
Preloading - The Definitive Guide - Teil II Als nächstes würden wir gerne eine Funktion ausführen, wenn die Datei fertig geladen ist. Nichts einfacher als das. Das Prinzip ist das gleiche wie bei der Balkenanzeige. Wir teilen dem Loader mit, dass wir daran interessiert sind, wann der Film fertig geladen ist und er ruft uns dann automatisch zum richtigen Zeitpunkt auf. ActionScript:
Neben onLoadComplete und onLoadProgress gibt es noch die Events onLoadStart, dass beim Start eines Ladevorgangs aufgerufen wird, onLoadTimeout, das aufgerufen wird, wenn der Ladevorgang nicht innerhalb von 15 Sekunden angefangen hat, onQueueStart, das beim Start einer ganzen Reihe von Ladevorgängen augerufen wird und onQueueStop, das das Ende dieser ganzen Reihe von Ladevorgängen signalisiert. Bisher haben wir immer nur den Ladevorgang von geladenen Filmen angezeigt. Manchmal möchte man aber auch den Hauptfilm preloaden. Auch das geht mit der neuen Loaderklasse. Dazu gibt es die Methode observe (target, url). Die Methode observe funktioniert ähnlich wie load, nur dass kein Ladevorgang gestartet wird, sondern ein laufender Vorgang beobachtet werden kann. Hier ist ein Beispiel, bei dem zuerst der Hauptfilm und dann ein MovieClip preloaded wird. ActionScript:
So das war es für heute. Jetzt haben wir schon eine ganze Menge von Möglichkeiten der neuen Loaderklasse kennengelernt. Sie erleichtert und vereinheitlicht das Programmieren von Preloadern enorm. Damit gewinnen wir alle wieder mehr Zeit, uns um die kreativen Dinge zu kümmern. Viel Spass, Ralf Bokelberg
__________________ Ralf Bokelberg™ - Flex & Flash Consulting |
| | |
| | #3 (permalink) |
| helpQLODhelp Registriert seit: Feb 2002 Ort: Köln
Beiträge: 8.505
|
Preloading - The Definitive Guide - Teil III Und jetzt noch ein paar Schmankerl zum Thema. 1. Anzeige von Kilobytes anstatt Bytes ActionScript:
2. Anzeige der Downloadgeschwindigkeit Neben den heruntergeladenen Bytes und der Gesamtgroesse in Bytes bekommt der onLoadProgress-Handler als letzten Parameter auch die Zeit mitgeliefert. Damit kann man auf einfache Weise die aktuelle Downloadgeschwindigkeit berechnen: ActionScript:
3. Eine gemeinsame Anzeige für mehrere geladene Filme Manchmal muss man mehrere Filme laden, aber man möchte eine Prozentzahl anzeigen, die zur gesamten Menge aller Bytes in Relation steht. Dazu muss man nicht viel machen. Das einzige was man vorab benötigt, ist eben diese Gesamtzahl, da Flash die nicht selbst ermitteln kann, ohne die Dateien zu laden. ActionScript:
4. Laden mehrerer verschiedener Dateitypen hintereinander. Falls sich jemand wundert, ob das wirklich funktioniert, hier ist ein Beispiel das kreuz und quer verschiedene Files lädt. ActionScript:
mfg r.
__________________ Ralf Bokelberg™ - Flex & Flash Consulting |
| | |
| | #4 (permalink) |
| Thorsten Manser (flash4all.de) Registriert seit: Jun 2001 Ort: Heilbronn-Heidelberg
Beiträge: 4.462
|
__________________ webDesign 4 a new generation: [ derBauer • B:Traxx - Special Audio Effects CD by derBauer - Out now! • Flash4All ] |
| | |
| | #5 (permalink) |
| helpQLODhelp Registriert seit: Feb 2002 Ort: Köln
Beiträge: 8.505
|
Preloading - The Definitive Guide - Teil IV Updates Loader -> LoaderClass Die Klasse heisst jetzt LoaderClass um Verwechselungen mit instanzen zu vermeiden. Wegen der Änderung des Namens hat sich auch der Dateiname geändert. Der Link oben ist aber schon korrigiert. watch -> observe Die Methode watch heisst jetzt observe. Die "Engländer" fanden das treffender Neue Eigenschaft: minSteps Man kann jetzt festlegen, wie wieviele Stufen der Preloaderanimation mindestens angezeigt werden sollen. Damit vermeidet man, dass ein Preloader erscheint und sofort wieder verschwindet. Ausserdem kann man so die Preloader auch offline testen. Standardmaessig ist 1 eingestellt. Hier ist ein Beispiel für die Änderungen ActionScript:
mfg r.
__________________ Ralf Bokelberg™ - Flex & Flash Consulting |
| | |
| | #6 (permalink) |
| helpQLODhelp Registriert seit: Feb 2002 Ort: Köln
Beiträge: 8.505
|
Preloading - The Definitive Guide - Teil V Inzwischen hat es einige Updates gegeben, die die Klasse noch etwas handlicher machen. Download http://www.helpqlodhelp.com/stuff/lo...erclass1.0.zip Am wichtigsten finde ich den neuen Parameterstil für die Callbacks (onLoadProgress, onLoadComplete, etc.). Alle Callbacks kriegen jetzt ein Objekt als Parameter. Über dieses Objekt kann man sich dann die Informationen holen, die man braucht. Hier ist ein kleines Beispiel: ActionScript:
Neue Getter Dazu gibt es jede Menge neue Getter, unter anderem für die Downloadgeschwindigkeit, die geschätzte Dauer des Downloads, die geladenen Bytes in KiloBytes, etc. pp. Hier ist eine komplette Liste der verfügbaren Getter: * isLoading() * getBytesLoaded() * getBytesTotal() * getPercent() * getStepBytesLoaded() * getStepPercent() * getKBLoaded() * getKBTotal() * getTime() * getSpeed() * getEstimatedTotalTime() * getTarget() * getTargetObj() * getUrl() Man muss also jetzt nicht mehr selbst herumrechnen, sondern die Klasse übernimmt das komplett. Natürlich kann man auch weiterhin einfach nur die Bytes abfragen und eigene Berechnungen damit anstellen. disableTimeout() Ausserdem ist jetzt die Möglichkeit dazugekommen, das Timeout auszuschalten. Ein Anwender hat für jedes zu ladende Objekt einen eigenen Loader gestartet. Dabei hat er festgestellt, dass bei manchen Systemen nur 2 Downloads gleichzeitig gestartet wurden, während die anderen warten mussten. Dabei konnte es dann vorkommen, dass ein Timeout-Error erzeugt wurde, weil das Laden länger als 10 Sekunden gedauert hat. Dieses Problem kann man jetzt umgehen, indem man die Timeoutüberprüfung mit disableTimeout() abschaltet. Sonstiges Dazu habe ich die ganze Klasse ein wenig aufgeraeumt. Die komplette Api und ein längeres Beispiel ist jetzt oben zu finden, während unten im Code nur noch Implementation folgt. Probleme ? Weitere Anregungen oder Probleme könnt ihr an meine E-Mail bokel.ff@helpQLODhelp.com schicken. MfG, r.
__________________ Ralf Bokelberg™ - Flex & Flash Consulting |
| | |
| | #7 (permalink) |
| helpQLODhelp Registriert seit: Feb 2002 Ort: Köln
Beiträge: 8.505
|
Preloading - The Definitive Guide - Teil VI Und damit das ganze nicht so trocken bleibt, folgt hier ein komplettes Anwendungsbeispiel für die LoaderClass: Ein Bilderwechsler, der eine Liste von Bildern hintereinander lädt und beim Übergang eine Überblendung macht. ActionScript:
Um das Script zum Laufen zu bringen, musst du - das Script auf den ersten Frame einer neuen Fla kopieren und die Fla speichern. - die Includedatei herunterladen (rechte Maustaste, "Ziel speichern unter" auswaehlen) und im gleichen Verzeichnis wie die Fla unter dem Name "com.qlod.LoaderClass.as" speichern. - in der Funktion main die Liste der Bilder und den Pfad des Bilderverzeichnisses angeben, und los gehts. Achtung Mac-Benutzer: Wenn du mit einem Mac arbeitest, dann musst du der Include-Datei einen kürzeren Namen geben, z.B. LoaderClass.as und die Zeile mit dem #include im Script ensprechend ändern. Macs sind leider nicht in der Lage mit Dateinamen länger als 32 Zeichen umzugehen. (Dankeschön an e2e4 für den Hinweis) Diskussion Hier ist ein Thread, in dem ihr über den Bilderwechsler diskutieren könnt: http://www.flashforum.de/forum/showt...444#post582444 Probleme ? Falls ihr ein unerwartetes Problem mit dem Code oder Anregungen für Verbesserungen habt, könnt ihr die an bokel.ff@helpQLODhelp.com schicken. Viel Spass damit, mfg r.
__________________ Ralf Bokelberg™ - Flex & Flash Consulting |
| | |
| | #8 (permalink) |
| helpQLODhelp Registriert seit: Feb 2002 Ort: Köln
Beiträge: 8.505
|
Preloading - The Definitive Guide - Teil VII Eine neue Beta ist draussen. Folgende Änderungen gibt es Neue Methoden zur Verwaltung der Queue - clear() löscht alle gespeicherten Ladevorgänge - removeCurrent() löscht den aktuellen Ladevorgang - remove( id) löscht den angegebenen Ladevorgang Damit letzteres funktioniert, liefern load und observe jetzt eine id ActionScript:
setParamStyleObject() ist nicht mehr nötig Die Umschaltung habe ich entfernt, es gibt jetzt nur noch den ParamStyle Object, d.h. die Callbacks bekommen jetzt immer ein Objekt als Parameter. Die alten Callbacks gibt es nicht mehr. ActionScript:
..Step.. getter gibt es nicht mehr Die getter, die gesteppte Werte geliefert haben, wenn man setMinSteps eingestellt hatte, gibt es nicht mehr. Stattdessen liefern die normalen getter jetzt diese Werte. ActionScript:
Namespace Die Klasse liegt jetzt nicht mehr in global sondern in _global.com.qlod. Der Konstruktor wird also jetzt so aufgerufen: ActionScript:
Dateiname Der Dateiname entspricht dem Namespace und ist kürzer, so dass er auch auf Macs funktioniert. ActionScript:
mfg r.
__________________ Ralf Bokelberg™ - Flex & Flash Consulting |
| | |
| | #9 (permalink) |
| helpQLODhelp Registriert seit: Feb 2002 Ort: Köln
Beiträge: 8.505
|
Preloading - The Definitive Guide - Teil VII Endlich ist sie fertig: Hier ist die Version 1.0 komplett mit Dokumentation. Dokumentation: http://www.helpqlodhelp.com/stuff/lo...Class.doc.html Download: http://www.helpqlodhelp.com/stuff/lo...erclass1.0.zip mfg r.
__________________ Ralf Bokelberg™ - Flex & Flash Consulting |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |