rss twitter

Framebasierter Preloader

Wer größere Datenmengen zu handeln hat muss auf einen Preloader zurückgreifen. Es gibt viele schöne gecodete Preloader und viele Loops, doch wirklich ausgefeilte Preloadanimationen sind weiterhin müssen auf der Timeline animiert sein UND synchron zum ProgressEvent sein. Um also zusammen mit den wirklich geladenen Prozent einen Realtime-Preloader mit einer schönen Animation zu realisieren, muss ein Preloader-Clip abhängig davon gesteuert werden. Schauen wir uns an, wie.

Also, auf der Bühne liegt ein Preloader-MovieClip mit beispielsweise 100 Frames, ein Frame für jedes geladene Prozent. Man kann das natürlich ausweiten, dazu muss man nur den gotoAndStop()-Aufruf abändern - denn das Script macht letztendlich nichts anderes als bei abhängig der geladenen Prozent den dazugehörigen Frame in einem Preloader-MC anzusteuern. Da das Event jedoch beim Laden tausendfach (je nach Dateigröße) aufgerufen wird, checken wir vorher, ob die ein Framesprung nötig ist, um Performance zu sparen.

Actionscript:
  1. package {
  2.     import flash.display.Loader;
  3.     import flash.display.Sprite;
  4.     import flash.events.Event;
  5.     import flash.events.ProgressEvent;
  6.     import flash.net.URLRequest;
  7.  
  8.     /**
  9.      * @author Marvin Blase <marvin@beautifycode.de>
  10.      */
  11.     public class Preloader extends Sprite {  
  12.  
  13.         private var _request:URLRequest;
  14.         private var _loader:Loader;
  15.         private var _loaderInfo:Object;
  16.  
  17.         private var _preloaderMC:PreloaderItem;
  18.         private var _prevFrame:int;
  19.  
  20.        
  21.         public function Preloader(file:String) {
  22.             _preloaderMC = new PreloaderItem();
  23.            
  24.             _request = new URLRequest();
  25.             _request.url = file;
  26.  
  27.             _loader = new Loader();
  28.             _loaderInfo = _loader.contentLoaderInfo;
  29.             _loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
  30.             _loaderInfo.addEventListener(Event.COMPLETE, dataComplete);
  31.             _loader.load(_request);
  32.            
  33.             addChild(_preloaderMC);
  34.         }
  35.  
  36.        
  37.         function progressHandler(event:ProgressEvent):void {
  38.             var _progressPerc:Number = event.bytesLoaded / event.bytesTotal;
  39.             var _updateFrame:Number = Math.floor(_progressPerc * 99) + 1;
  40.    
  41.             if(_prevFrame != _updateFrame) updatePreloader(_updateFrame);
  42.    
  43.             _prevFrame = _updateFrame;
  44.         }
  45.  
  46.        
  47.         function updatePreloader(frame:int):void {
  48.             _preloaderMC.gotoAndStop(frame);
  49.         }
  50.  
  51.        
  52.         function dataComplete(event:Event):void {
  53.             removeChildAt(0);
  54.             dispatchEvent(new Event("preloadingDone", true, false));
  55.         }
  56.     }
  57. }

Eine Antwort zu “Framebasierter Preloader”

Kommentar hinterlassen

Powered by WordPress | Free T-Mobile Phones for Sale | Thanks to Palm Pre Blog, Video Game Music and Get Six Pack Abs