11RIA 闪客社区 - 最赞 Animate Flash 论坛

搜索
查看: 3199|回复: 10
上一主题 下一主题

[已解决悬赏] 请教同时加载多张图片

[复制链接] TA的其它主题
发表于 2019-8-18 16:06:25 | 显示全部楼层 |阅读模式
65银子
用一个Loader加载多张图片,一张一张排队加载速度太慢了,我的程序是在本地运行的,所以我想for多个Loader同时加载,但这样加载完成后顺序全乱了,图片加载完成后怎么知道是那个Loader加载进来的?或者有什么更好的方法吗?

[Actionscript3] 纯文本查看 复制代码
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加载进来的?
}

最佳答案

查看完整内容

加栽完成后顺序不乱,建议一张一张加载。 [mw_shl_code=actionscript3,true]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 + "%"); } ...
发表于 2019-8-18 16:06:26 | 显示全部楼层
加栽完成后顺序不乱,建议一张一张加载。

[Actionscript3] 纯文本查看 复制代码
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[index]);
			}
			if (list is Array)
			{
				total = list.length;
				load(list[index]);
			}
			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[index]);
			}
			else
			{
				this.dispatchEvent(new Event(Event.COMPLETE));
			}

		}

		/*加载进度*/
		public function get percent():Number
		{
			return Math.round(loader.contentLoaderInfo.bytesLoaded/loader.contentLoaderInfo.bytesTotal*100);
		}


	}
}


回复

使用道具 举报

发表于 2019-8-18 18:16:21 | 显示全部楼层
命名,关联
回复

使用道具 举报

 楼主| 发表于 2019-8-18 19:28:55 | 显示全部楼层

情况是这样,例如有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

怎么才能获取加载进来的图片编号?
回复

使用道具 举报

 楼主| 发表于 2019-8-18 21:36:34 | 显示全部楼层
wgq341 发表于 2019-8-18 20:20
加栽完成后顺序不乱,建议一张一张加载。

[mw_shl_code=actionscript3,true]var url:Array = new Array("p ...

谢谢,不是我想要的效果,这个本质还是一张一张加载,最后一起显示,速度和多个Loader同时加载没有可比性,真的搞不懂本地加载图片竟然如此慢,就好像加载网络图片一样,就这点AS2就比AS3灵活太多。
回复

使用道具 举报

发表于 2019-8-18 22:02:54 | 显示全部楼层
上面的代码只是建议用一张一张加载。
同时加载N张图片,(图片大小不一,所以顺序肯定是乱的);
每个加栽完成后重新命名,imgLoader1为1,imgLoader2为2;
如果需要显示排序,可以设置坐标、也可以用深度控制,当然还有其他好方法;


回复

使用道具 举报

 楼主| 发表于 2019-8-18 22:19:57 | 显示全部楼层
wgq341 发表于 2019-8-18 22:02
上面的代码只是建议用一张一张加载。
同时加载N张图片,(图片大小不一,所以顺序肯定是乱的);
每个加栽 ...

我试了,其实还是排队加载。
你可以for多个loader同时加载和单个loader排队加载看看速度,速度起码相差10倍。
[Actionscript3] 纯文本查看 复制代码
for (var i=0; i<n; i++) {
	var loader:Loader = new Loader();
	loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
	loader.load(new URLRequest(urlArr[i]));
}
回复

使用道具 举报

 楼主| 发表于 2019-8-18 22:57:51 | 显示全部楼层
哈哈,解决了,其实变通下就好,开始加载前先把所有loader保存到数组,这样加载完后想干什么就干什么。
还是要感谢下 @wgq341  
回复

使用道具 举报

发表于 2019-11-27 19:37:03 | 显示全部楼层
本帖最后由 kasher 于 2019-11-27 19:46 编辑

学习了
回复

使用道具 举报

发表于 2019-11-29 10:03:19 | 显示全部楼层
其实可以FOR循环,然后根据循环的图片赋予ID和name属性。然后添加进数组或者容器。需要那个就调用哪个就好了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)



快速回复 返回顶部 返回列表