Třída MyLoader a Progr
Leden 3rd, 2009 od admin, v kategorii Flash. Bez komentářů
Dnes jsem potřeboval v actionscriptu 3 při načítání obrázků, zjistit jeho rodiče. Což v události ProgressEvent.PROGRESS není povoleno. Tak jsem si vytvořil vlastní třídy jejíž pomocí jsem toho bez problémů dosáhl.
Takže nejdřív jsem si vytvořil třídu z názvem Progr. Která vytváří dvě nové vlastní události. A to Progr.prubeh a Progr.konec.Oběma těmto událostem jsem umístil tři parametry jeden typu movie clip a dva typu number. Ty dva typu number mám v plánu využít jako ukazatele načtených a celkových dat. A movie clip bude definován uživatelem třídy.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package { import flash.events.Event; import flash.display.MovieClip; public class Progr extends flash.events.Event { public static const prubeh:String = "prubeh"; public static const konec:String = "konec"; public var mc:MovieClip; public var loaded:Number; public var total:Number; public function Progr(type:String, _mc:MovieClip, _loaded:Number, _total:Number):void{ super(type); this.mc = _mc; this.loaded = _loaded; this.total = _total; } } } |
Jak je známo, když chci načíst nějaký externí obrázek či movie clip v actionscriptu 3, musím použít objekt Loader. Tak jsem se si vytvořil jednoduchou třídu, která objekt Loader rozšiřuje a využívá předchozí třídu, tak jak jsem popisoval výše.Třída se jmenuje MyLoader.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | package { import flash.display.*; import flash.net.URLRequest; import flash.events.*; import progr; public class MyLoader extends Loader { var mc:MovieClip; public function MyLoader(_mc) { this.mc = _mc; } public function loadRequest(url:String):void { var urlReq:URLRequest = new URLRequest(url); load(urlReq); handleEvents(this.contentLoaderInfo); } private function handleEvents(d:IEventDispatcher):void { d.addEventListener(Event.COMPLETE, completeHandler); d.addEventListener(ProgressEvent.PROGRESS, progressHandler); } private function completeHandler(event:Event):void { this.dispatchEvent(new progr(Progr.konec,this.mc,0,0)); } private function progressHandler(event:ProgressEvent):void { this.dispatchEvent(new progr(Progr.prubeh,this.mc, event.bytesLoaded, event.bytesTotal)); } } } |
Ještě jednoduchý příklad využití těchto tříd.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import MyLoader; var adresa:String = "obrazek.jpg"; var novyMc:MovieClip = new MovieClip(); var loader:MyLoader = new MyLoader(novyMc); loader.loadRequest(adresa); function obrazekNacitani(event:Progr):void { var mc:MovieClip = (event.mc as MovieClip); trace("Movie clip "+mc+" je načten z "+event.loaded/event.total*100+"%"); } function obrazekKonec(event:Progr):void{ var mc:MovieClip = (event.mc as MovieClip); trace("Movie clip "+mc+" je načten"); } loader.addEventListener(Progr.prubeh,obrazekNacitani); loader.addEventListener(Progr.konec,obrazekKonec); |
Toto lze zejména využít, když načítáte více obrázků najednou a v každém máte umístěný vlastní preloader. Tento příklad je zaměřený na přidání konkrétního parametru do konkrétní události, ale pochopitelně se dá využít na jakoukoliv jinou událost a jakýkoliv jiný parametr.