请教同时加载多张图片
用一个Loader加载多张图片,一张一张排队加载速度太慢了,我的程序是在本地运行的,所以我想for多个Loader同时加载,但这样加载完成后顺序全乱了,图片加载完成后怎么知道是那个Loader加载进来的?或者有什么更好的方法吗?var imgLoader1:Loader = new Loader();
var imgLoader2:Loader = new Loader();
var imgLoader3:Loader = new Loader();
imgLoader1.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
imgLoader2.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
imgLoader3.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
function completeHandler(event:Event):void {
var img:Bitmap = new Bitmap(event.target.content.bitmapData,"auto",true);
//这里怎么知道图片是那个Loader加载进来的?
}
加栽完成后顺序不乱,建议一张一张加载。
var url:Array = new Array("pic_1.jpg,pic_2.jpg,pic_3.jpg");
var loader:DisplayLoader = new DisplayLoader(url);
loader.addEventListener(Event.COMPLETE,completeHandler);
loader.addEventListener(ProgressEvent.PROGRESS,progressHandler);
function progressHandler(event:Event):void
{
trace(event.target.percent + "%");
}
function completeHandler(event:Event):void
{
//加载完成***********
addChild(loader);
}
package
{
import flash.display.Sprite;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.events.IOErrorEvent;
public class DisplayLoader extends Sprite
{
private var loader:Loader;
private var list:*;
private var index:int = 0;
private var total:int;
/*
* DisplayLoader
* @param url 外部显示对象地址(可以是XMLList、XML、Array、String)
*/
public function DisplayLoader(url:*):void
{
this.list = url;
if (list is XMLList||list is XML)
{
total = list.length();
load(list);
}
if (list is Array)
{
total = list.length;
load(list);
}
if (list is String)
{
load(list);
}
}
public function load(url:String):void
{
loader = new Loader;
loader.load(new URLRequest(url));
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,progressHandler);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);
}
private function progressHandler(event:ProgressEvent):void
{
this.dispatchEvent(new Event(ProgressEvent.PROGRESS));
}
private function completeHandler(event:Event):void
{
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,completeHandler);
addChild(loader);
if (list is XMLList||list is XML||list is Array)
{
next();
}
else
{
this.dispatchEvent(new Event(Event.COMPLETE));
}
//这里可以为每张图片命名储存查找
}
private function next():void
{
if (index<total-1)
{
index++;
load(list);
}
else
{
this.dispatchEvent(new Event(Event.COMPLETE));
}
}
/*加载进度*/
public function get percent():Number
{
return Math.round(loader.contentLoaderInfo.bytesLoaded/loader.contentLoaderInfo.bytesTotal*100);
}
}
}
命名,关联 kasher 发表于 2019-8-18 18:16
命名,关联
情况是这样,例如有20张图片,pic_1.jpg、pic_2.jpg、pic_3.jpg........
一个Loader排队加载,加载完成顺序是这样的:pic_1.jpg、pic_2.jpg、pic_3.jpg........
for多个Loader同时加载,加载完成顺序是这样的:pic_18.jpg、pic_5.jpg、pic_8.jpg........
反正顺序就是乱的,根本不知道那张是pic_1那张是pic_20
怎么才能获取加载进来的图片编号? wgq341 发表于 2019-8-18 20:20
加栽完成后顺序不乱,建议一张一张加载。
var url:Array = new Array("p ...
谢谢,不是我想要的效果,这个本质还是一张一张加载,最后一起显示,速度和多个Loader同时加载没有可比性,真的搞不懂本地加载图片竟然如此慢,就好像加载网络图片一样,就这点AS2就比AS3灵活太多。 上面的代码只是建议用一张一张加载。
同时加载N张图片,(图片大小不一,所以顺序肯定是乱的);
每个加栽完成后重新命名,imgLoader1为1,imgLoader2为2;
如果需要显示排序,可以设置坐标、也可以用深度控制,当然还有其他好方法;
wgq341 发表于 2019-8-18 22:02
上面的代码只是建议用一张一张加载。
同时加载N张图片,(图片大小不一,所以顺序肯定是乱的);
每个加栽 ...
我试了,其实还是排队加载。
你可以for多个loader同时加载和单个loader排队加载看看速度,速度起码相差10倍。
for (var i=0; i<n; i++) {
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.load(new URLRequest(urlArr));
} 哈哈,解决了,其实变通下就好,开始加载前先把所有loader保存到数组,这样加载完后想干什么就干什么。
还是要感谢下 @wgq341 本帖最后由 kasher 于 2019-11-27 19:46 编辑
学习了#:)#:) 其实可以FOR循环,然后根据循环的图片赋予ID和name属性。然后添加进数组或者容器。需要那个就调用哪个就好了。
页:
[1]
2