Rss Feed

Talos

blog pro osvícence, kteří neovládají gramatiku

Třída MyLoader a Progr

Leden 3rd, 2009 od , 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.