Zurück   Flashforum > Aktuelles > Tutorials > Flash Tutorials

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 04-05-2003, 12:50   #1 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
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:
  1. // Ohne diese include-Datei geht gar nichts
  2. #include "com.qlod.LoaderClass.as"
  3.  
  4. // Wir erzeugen einen neuen Loader
  5. meinLoader = new com.qlod.LoaderClass();
  6.  
  7. // Wir laden die SWF "meinFilm.swf"
  8. // Der MovieClip ziel_mc muss sich bereits auf der Bühne befinden
  9. meinLoader.load(ziel_mc, "meinFilm.swf");

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:
  1. // Ohne diese include-Datei geht gar nichts
  2. #include "com.qlod.LoaderClass.as"
  3.  
  4. // Wir erzeugen einen neuen Loader
  5. meinLoader = new com.qlod.LoaderClass();
  6.  
  7. // Der Balken bekommt einen Handler zugewiesen,
  8. // der automatisch vom Loader regelmäßig aufgerufen wird
  9. // und als Parameter die geladenen Bytes bekommt.
  10. balken_mc.onLoadProgress = function( loaderObj){
  11.     // Wir holen uns die Prozente
  12.     var prozent = loaderObj.getPercent();
  13.     // Die Prozentzahl benutzen wir, um den Balken   
  14.                 // entsprechend in der Breite zu skalieren
  15.     this._xscale = prozent;
  16. }
  17.  
  18. // Wir teilen dem Loader mit, dass der Balken an
  19. // Informationen zum Ladevorgang interessiert ist.
  20. // Der Loader fungiert hier als Sender (Broadcaster),
  21. // den Zuhörer (Listener) abonnieren können.
  22. meinLoader.addListener(balken_mc)
  23.  
  24. // Wir laden die SWF "meinFilm.swf"
  25. // Der MovieClip ziel_mc muss sich bereits auf der Bühne befinden
  26. meinLoader.load(ziel_mc, "meinFilm.swf");

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 ...
bokel ist offline   Mit Zitat antworten
Alt 04-05-2003, 12:50   #2 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
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:
  1. // Ohne diese include-Datei geht gar nichts
  2. #include "com.qlod.LoaderClass.as"
  3.  
  4. // Wir erzeugen einen neuen Loader
  5. meinLoader = new com.qlod.LoaderClass();
  6.  
  7. // Der Balken bekommt einen Handler zugewiesen,
  8. // der automatisch vom Loader regelmäßig aufgerufen wird
  9. // und als Parameter die geladenen Bytes bekommt.
  10. balken_mc.onLoadProgress = function( loaderObj){
  11.     var prozent = Math.floor(loaderObj.getPercent());
  12.     // Die Prozentzahl benutzen wir, um den Balken
  13.                 // entsprechend in der Breite zu skalieren
  14.     this._xscale = prozent;
  15. }
  16.  
  17. // Wir teilen dem Loader mit, dass der Balken an
  18. // Informationen zum Ladevorgang interessiert ist.
  19. // Der Loader fungiert hier als Sender (Broadcaster),
  20. // den Zuhörer (Listener) abonnieren können.
  21. meinLoader.addListener(balken_mc);
  22.  
  23. // Diese Funktion wird aufgerufen, wenn die Datei
  24. // fertig geladen ist
  25. // Sie gibt eine Meldung in das Ausgabefenster aus.
  26. function onLoadComplete( success, loaderObj){
  27.     if(success){
  28.           trace("Ja prima, alles fertig geladen.");
  29.     } else {
  30.           trace("Och schade, das Laden von " +
  31.                                 loaderObj.getUrl() + " in " + loaderObj.getTarget() + " hat nicht geklappt.");
  32.     }     
  33. }
  34.  
  35. // Die Funktion onLoadComplete ist auf der aktuellen Timeline
  36. // definiert, deshalb melden wir die aktuelle Timeline als Listener an
  37. meinLoader.addListener(this);
  38.  
  39. // Wir laden die SWF "meinFilm.swf"
  40. // Der MovieClip ziel_mc muss sich bereits auf der Bühne befinden
  41. meinLoader.load(ziel_mc, "meinFilm.swf");

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:
  1. // Ohne diese include-Datei geht gar nichts
  2. #include "com.qlod.LoaderClass.as"
  3.  
  4. // Wir erzeugen einen neuen Loader
  5. meinLoader = new com.qlod.LoaderClass();
  6.  
  7. // Der Balken bekommt einen Handler zugewiesen,
  8. // der automatisch vom Loader regelmäßig aufgerufen wird
  9. // und als Parameter die geladenen Bytes bekommt.
  10. balken_mc.onLoadProgress = function( loaderObj){
  11.     var prozent = Math.floor(loaderObj.getPercent());
  12.     // Die Prozentzahl benutzen wir, um den Balken
  13.                 // entsprechend in der Breite zu skalieren
  14.     this._xscale = prozent;
  15. }
  16.  
  17. // Wir teilen dem Loader mit, dass der Balken an
  18. // Informationen zum Ladevorgang interessiert ist.
  19. // Der Loader fungiert hier als Sender (Broadcaster),
  20. // den Zuhörer (Listener) abonnieren können.
  21. meinLoader.addListener(balken_mc);
  22.  
  23. // Wir wollen zuerst den Hauptfilm vorladen
  24. meinLoader.observe(_root, _root._url);
  25.  
  26. // Anschliessend laden wir die SWF "meinFilm.swf"
  27. // Der MovieClip ziel_mc muss sich bereits auf der Bühne befinden
  28. meinLoader.load(ziel_mc, "meinFilm.swf");

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
bokel ist offline   Mit Zitat antworten
Alt 05-05-2003, 11:33   #3 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
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:
  1. bar_mc.onLoadProgress = function( loaderObj){
  2.     //geladene kilobytes
  3.     var kbLoaded = loaderObj.getKBLoaded();
  4.     var kbTotal = loaderObj.getKBTotal();
  5.     trace(kbLoaded + "kb von " + kbtotal + " geladen.");
  6. }

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:
  1. bar_mc.onLoadProgress = function( loaderObj){
  2.     var downloadGeschwindigkeit = Math.floor( loaderObj.getSpeed());
  3.     trace(downloadGeschwindigkeit);
  4. }

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:
  1. // Die Variable gesamtAnzahlBytes muss man vorher mit dem entsprechenden Wert füllen
  2. bar_mc.gesamtAnzahlBytes = 123467;
  3. bar_mc.bisherGeladen = 0;
  4.  
  5. bar_mc.onLoadProgress = function( loaderObj){
  6.     var prozent = (loaderObj.getBytesLoaded() + this.bisherGeladen) * 100 / this.gesamtAnzahlBytes;
  7.     trace(prozent);
  8. }
  9.  
  10. // wenn das Target geladen ist, addieren wir dessen Groesse auf
  11. bar_mc.onLoadComplete = function( success, loaderObj){
  12.                  this.bisherGeladen += loaderObj.getBytesLoaded();
  13. }

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:
  1. #include "com.qlod.LoaderClass.as"
  2.  
  3. // Diesmal erzeugen wir den bar_mc mit AS
  4. createEmptyMovieClip("bar_mc", 1);
  5.  
  6. bar_mc.onLoadProgress = function( loaderObj){
  7.         trace("onLoadProgress " + arguments);
  8.         //
  9.         var percent = loaderObj.getPercentLoaded();
  10.         //
  11.         // wir zeichnen eine Linie zur Anzeige der Prozente
  12.         this.clear();
  13.         this.lineStyle(10,0x000000);
  14.         this.lineTo(100,0);
  15.         this.lineStyle(10, 0xff0000);
  16.         this.moveTo(0,0);
  17.         this.lineTo(percent, 0);
  18. }
  19.  
  20. bar_mc.onLoadComplete = function(success, loaderObj){
  21.     trace("onLoadComplete " + [success, loaderObj.getUrl()]);
  22. }
  23.  
  24. var meinLoader = new LoaderClass();
  25. meinLoader.addListener(bar_mc);
  26.  
  27. //wir beginnen mit der Hauptzeitleiste
  28. meinLoader.observe(this, this._url);
  29.  
  30. //dann laden wir eine XML-Datei
  31. x = new XML();
  32. meinLoader.load(x, "meinxml.xml");
  33.  
  34. //dann laden wir ein paar Variablen aus einem Textfile
  35. l = new LoadVars();
  36. meinLoader.load(l, "meintxt.txt");
  37.  
  38. //dann laden wir ein jpg auf level 7
  39. meinLoader.load(7, "meinpic.jpg");
  40.  
  41. //dann laden wir ein swf in einen MovieClip
  42. createEmptyMovieClip("mc", 123);
  43. meinLoader.load(mc, "meinmovie.swf");
  44.    
  45. //und zuguterletzt laden wir einen Sound
  46. s = new Sound();
  47. meinLoader.load(s, "meinsound.mp3");

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 06-05-2003, 12:22   #4 (permalink)
Thorsten Manser (flash4all.de)
 
Benutzerbild von Thorsten [Flash4all]
 
Registriert seit: Jun 2001
Ort: Heilbronn-Heidelberg
Beiträge: 4.462
fragen? diskussion? danksagung?

hier bitte: [Genial + THX] Preloading - The Definitive Guide



T.
__________________
webDesign 4 a new generation:
[ derBauerB:Traxx - Special Audio Effects CD by derBauer - Out now!Flash4All ]
Thorsten [Flash4all] ist offline   Mit Zitat antworten
Alt 06-05-2003, 16:49   #5 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
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:
  1. #include "com.qlod.LoaderClass.as"
  2.  
  3. // Das wird unser Balkendisplay
  4. createEmptyMovieClip("balken_mc", 1);
  5. //
  6. balken_mc.onLoadProgress = function( loaderObj) {
  7.     var percent = Math.floor(loaderObj.getPercent());
  8.     //
  9.     // Linie zeichnen
  10.     this.clear();
  11.     this.lineStyle(10, 0x000000);
  12.     this.lineTo(100, 0);
  13.     this.lineStyle(10, 0xff0000);
  14.     this.moveTo(0, 0);
  15.     this.lineTo(percent, 0);
  16. };
  17.  
  18. myLoader = new com.qlod.LoaderClass();
  19.  
  20. // es sollen mindestes 5 Schritte angezeigt werden
  21. myLoader.setMinSteps(5);
  22.  
  23. // listener anmelden
  24. myLoader.addListener(balken_mc);
  25.  
  26. // wir beobachten die Hauptzeitleiste
  27. myLoader.observe(_root);
  28.  
  29. // und laden anschliessend einen swf
  30. myLoader.load( target_mc, "myMovi.swf");

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 17-05-2003, 12:33   #6 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
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:
  1. // so sieht der neue "Objekt"-Stil aus
  2. // Man bekommt lediglich ein Objekt übergeben und muss
  3. // sich die Infos dann daraus besorgen.
  4. onLoadProgress = function( loaderObj){
  5.  var percent = loaderObj.getPercent();
  6.  var speed = loaderObj.getSpeed();
  7.  var kbLoaded = loaderObj.getKbLoaded();
  8.  trace("Percent, Speed, kbLoaded: " + [percent, speed, kbLoaded]);
  9. }

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.
bokel ist offline   Mit Zitat antworten
Alt 26-05-2003, 00:21   #7 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
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:
  1. // Die Klasse braucht den Code der LoaderClass
  2. #include "com.qlod.LoaderClass.as"
  3.  
  4. // Erzeuge Instanz der Klasse
  5. o = _global.PictureChangerClass = function(){
  6.     if(arguments[0] == 'NO_INIT') return;
  7.     this.init.apply( this, arguments);
  8. }
  9. //
  10. o = o.prototype;
  11. //
  12. // initialisiere die Instanzeigenschaften
  13. // und den Loader
  14. o.init = function( showtimeMs, fadeStepMs, fadeStep){
  15.     this.showtimeMs = showtimeMs;
  16.     this.fadeStepMs = fadeStepMs;
  17.     this.fadeStep = fadeStep;
  18.     //
  19.     this.ui = null;
  20.     this.actPic = 0;
  21.     this.picList = null;
  22.     //
  23.     this.loader = new com.qlod.LoaderClass();
  24.     this.loader.setMinSteps(5);
  25.     this.loader.addListener( this);
  26. }
  27. //
  28. // erzeuge die Movieclips für die Anzeige
  29. o.createUI = function( base, name, depth, x, y){
  30.     this.ui = base.createEmptyMovieClip( name, depth);
  31.     this.ui.createEmptyMovieClip("pic0", 0);
  32.     this.ui.createEmptyMovieClip("pic1", 1);
  33.     this.setPos( x, y);
  34. }
  35. //
  36. // positioniere die Anzeige
  37. o.setPos = function( x, y){
  38.     this.ui._x = x;
  39.     this.ui._y = y;
  40. }
  41. //
  42. // intialisiere die Bilderliste
  43. o.setPicList = function( picList, directory){
  44.     this.picList = picList;
  45.     this.directory = directory;
  46.     this.actPic = 0;
  47. }
  48. //
  49. // liefere den Mc, der aktuell sichtbar ist
  50. o.getActPicMc = function(){
  51.     return this.ui["pic" + this.actPic % 2];
  52. }
  53. //
  54. // liefere den Mc, der aktuell unsichtbar ist
  55. o.getNextPicMc = function(){
  56.     return this.ui["pic" + ((this.actPic + 1) % 2)];
  57. }
  58. //
  59. // wird vom Loader aufgerufen, wenn das Laden beginnt
  60. // das neue Bild soll zunächst unsichtbar sein
  61. o.onLoadStart = function( loaderObj){
  62.     this.getNextPicMc()._alpha = 0;
  63. }
  64. //
  65. // wird vom Loader während des Ladens aufgerufen
  66. // zeigt eine feine rote Linie als Ladeanzeige
  67. o.onLoadProgress = function( loaderObj){
  68.     this.ui.clear();
  69.     this.ui.moveTo(0,-1);
  70.     this.ui.lineStyle(0, 0xff0000);
  71.     this.ui.lineTo( Math.floor(loaderObj.getStepPercent()), -1);
  72. }
  73. //
  74. // wird vom Loader aufgerufen, wenn das Laden endet
  75. // die rote Linie wird gelöscht und die Blende gestartet
  76. o.onLoadComplete = function( loaderObj){
  77.     this.ui.clear();
  78.     this.startCrossFade();
  79. }   
  80. //
  81. // starte die Anzeigeschleife
  82. o.start = function(){
  83.     this.loadNextPic();
  84. }
  85. //
  86. // stoppe die Anzeigeschleife
  87. o.stop = function(){
  88.     clearInterval( this.interval);
  89. }
  90. //
  91. // starte die Überblendung
  92. o.startCrossFade = function(){
  93.     this.interval = setInterval( this, "onCrossfade", this.fadeStepMs);
  94. }
  95. //
  96. // wird im Interval aufgerufen
  97. // blende die Clips langsam ineinander über
  98. o.onCrossfade = function(){
  99.     var ap_mc = this.getactPicMc();
  100.     var np_mc = this.getNextPicMc()
  101.     ap_mc._alpha -= this.fadeStep;
  102.     np_mc._alpha += this.fadeStep;
  103.     if( ap_mc._alpha <= 0 || np_mc._alpha >= 100){
  104.         ap_mc._alpha = 0;
  105.         np_mc._alpha = 100;
  106.         clearInterval( this.interval);
  107.         this.interval = setInterval( this, "onShow", this.showtimeMs);
  108.     }
  109. }
  110. //
  111. // wird im Interval aufgerufen
  112. // zeige das nächste Bild
  113. o.onShow = function(){
  114.     clearInterval( this.interval);
  115.     this.loadNextPic();
  116. }
  117. //
  118. // lade das nächste Bild
  119. o.loadNextPic = function(){
  120.     this.actPic++;
  121.     if( this.actPic >= this.picList.length) this.actPic = 0;
  122.     this.loader.load( this.getNextPicMc(), this.getPicUrl());
  123. }
  124. //
  125. // liefere die komplette Url des nächsten Bilds
  126. o.getPicUrl = function(){
  127.     var url = this.directory + this.picList[ this.actPic];
  128.     return url;
  129. }
  130. //
  131. delete o;
  132. //
  133. // Das Hauptprogramm
  134. // Erzeuge eine Instanz der neuen Klasse,
  135. // initialisiere sie und starte die Bilderschleife
  136. function main(){
  137.     pc = new PictureChangerClass( 3000, 50, 10);
  138.     pc.setPicList(["1.swf", "2.swf", "3.swf", "4.swf"],
  139. "http://www.deineDomain.de/bilder/");
  140.     pc.createUI( _root, "PictureChanger_mc", 1, 200, 150);
  141.     pc.start();
  142. }
  143. //
  144. main();

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.
bokel ist offline   Mit Zitat antworten
Alt 02-06-2003, 09:58   #8 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
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:
  1. id = ldr.load(mc, "movie.swf");
  2. ldr.remove( id);

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:
  1. // So sehen die Callbacks jetzt aus
  2. onLoadProgress = function( loaderObj){
  3.        var percent= loaderObj.getPercent();
  4. }
  5.  
  6. onLoadComplete = function( success, loaderObj){
  7.        if( success){
  8.              trace("Fertig: " + loaderObj.getUrl());   
  9.        }
  10. }


..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:
  1. //Es sollen mindestens 5 Schritte des
  2. //Ladebalkens angezeigt werden
  3. loader.setMinSteps( 5);
  4.  
  5. onLoadProgress = function( loaderObj){
  6.        //Alte Version
  7.        //var percent= loaderObj.getStepPercent();
  8.        //Neue Version
  9.        var percent= loaderObj.getPercent();
  10. }

Namespace
Die Klasse liegt jetzt nicht mehr in global sondern in _global.com.qlod. Der Konstruktor wird also jetzt so aufgerufen:

ActionScript:
  1. // Alte Version
  2. loader = new LoaderClass();
  3. //Neue Version
  4. loader = new com.qlod.LoaderClass()

Dateiname
Der Dateiname entspricht dem Namespace und ist kürzer, so dass er auch auf Macs funktioniert.

ActionScript:
  1. #include "com.qlod.LoaderClass.as"

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 13-06-2003, 11:31   #9 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
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.
bokel ist offline   Mit Zitat antworten
Antwort

Lesezeichen

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 aus.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 00:07 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele