flash中利用Loader.loadBytes方法和URLStream类实现图片的逐步加
来源:岁月联盟
时间:2009-10-06
所幸的是,Flash提供了Loader.loadBytes方法和URLStream类。
首先,要使用URLStream类,而不是URLLoader。它们的区别就是URLLoader需要等到所有的数据下载完成之后,才能获取。而URLStream可以一边下载,一边就可以取到数据了。
其次,Loader.loadBytes,可以直接发送数据给Loader,而不是让Loader去下载。每一次loadBytes,Loader都会丢弃以前的数据,所以在代码中使用了_data的ByteArray保存数据。
代码如下:
1 package
2 {
3 import flash.display.Loader;
4 import flash.display.Sprite;
5 import flash.display.StageAlign;
6 import flash.events.ContextMenuEvent;
7 import flash.events.Event;
8 import flash.net.URLRequest;
9 import flash.net.URLStream;
10 import flash.ui.ContextMenu;
11 import flash.ui.ContextMenuItem;
12 import flash.utils.ByteArray;
13 import flash.utils.getTimer;
14 public class Main extends Sprite
15 {
16 private var _loader:Loader = new Loader();
17 private var _urlstream:URLStream = new URLStream();
18 private var _data:ByteArray = new ByteArray();
19 public function Main():void
20 {
21 var loadmenu:ContextMenuItem = new ContextMenuItem("Load image");
22 loadmenu.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, this.onLoadImage, false);
23 this.contextMenu = new ContextMenu();
24 this.contextMenu.customItems.push(loadmenu);
25
26 _urlstream.addEventListener('progress', processData);
27 _urlstream.addEventListener('complete', processData);
28
29 addChild(_loader);
30
31 stage.align = StageAlign.TOP_LEFT;
32 }
33 public function onLoadImage(e:Event):void
34 {
35 _loader.unload();
36 _data.length = 0;
37 var url:String = "http://files.cnblogs.com/Greatest/test.jpg.zip";
38 _urlstream.load(new URLRequest(url + "?q=" + getTimer()))
39 }
40 public function processData(e:Event):void
41 {
42 var oldlen:int = _data.length;
43 _urlstream.readBytes(_data, _data.length);
44 if (_data.length > oldlen)
45 {
46 _loader.loadBytes(_data);
47 }
48 }
49 }
50 }
下一篇:卡通人物眨眼动画如何实现