打印

[AS3] 加载多个Loader,为什么只显示一个?

一个Sprite加载多个Loader,每个Loader都load一个jpg文件
但是每次只显示一个Loader的实例,这是咋回事?难道
可能是叠在一起了.设置不同的x,y坐标看看!
设置x,y坐标了,还是只显示一个
创建Loader实例的时候就设置了
是不是一定要加载完成以后设置的X,Y坐标才有效?
import flash.display.Loader;
import flash.net.URLRequest;
import flash.display.Sprite;
var rq:URLRequest=new URLRequest("1.jpg");
var rq2:URLRequest=new URLRequest("2.jpg");
var s:Sprite=new Sprite();
this.addChild(s);
var l1:Loader=new Loader();
var l2:Loader=new Loader();
l1.x=100;
l1.y=100;
s.addChild(l1);
s.addChild(l2);
l1.load(rq);
l2.load(rq2);

在时间轴上写代码测试没问题
但是在文档类里死活就是只加载最后一张图片,简直郁闷
你用事件试试
EVOLUTION

TOP

我在文档类里就是Event.COMPLETE以后再addChild的....

package org.com{
       import flash.display.Sprite;
       import flash.display.Loader;
       import flash.net.URLRequest;
       import flash.net.URLLoader;
       import flash.events.Event;
       import flash.display.MovieClip;
       public class BackgroundBuild extends MovieClip {
              private var mapData:URLLoader;
              private var mapRequest:URLRequest;
              private var mapList:Array;
              private var mapPart:Array;
              private var mapArr:Array;
              public function BackgroundBuild() {
                     mapArr=new Array();
                     mapRequest=new URLRequest("map.xml");
                     mapData=new URLLoader();
                     mapData.addEventListener(Event.COMPLETE,handleComplete);
                     mapData.load(mapRequest);
              }
              private function parseMap(c:XML):void {
                     mapPart=new Array();
                     mapList=new Array();
                     //trace(c.children().length())
                     for (var i:uint=0; i<=c.children().length()-1; i++) {
                            mapPart.push(String(c.children()[i].@path));
                            mapList.push(String(c.children()[i].@id));

                     }
                     buildMap(mapList,mapPart);
              }
              private function handleComplete(e:Event):void {
                     //trace(typeof e.target.data);
                     parseMap(XML(e.target.data));
              }
              private function buildMap(list:Array,path:Array):void {
                     for (var i:uint=0; i<=list.length-1; i++) {
                            var loader:Loader=new Loader();
                            loader.x=i*80;
                            loader.y=i*80;
                            mapArr.push(loader);
                            this.addChild(loader);
                            var rq:URLRequest=new URLRequest(path[i]);
                            trace(path[i]);
                            loader.load(rq);
                            loader.contentLoaderInfo.addEventListener(Event.COMPLETE,handleBg);
                     }
              }
              private function handleBg(e:Event):void {
                     /*var end:uint=mapArr.length-1;
                     for (var i:uint=0; i<=end; i++) {
                            //trace(mapArr[i]);
                            this.addChild(mapArr[i]);
                            mapArr[i].x=i*80;
                            mapArr[i].y=i*80;
                     }*/
                     this.addChild(e.target.loader);
              }
       }
}

TOP

加载完成以后设置的X,Y坐标试下.如果加载多张图片,例如:显示图片列表之类的

应该可以递归方式来加载 就是一张张的加载.


import flash.display.Loader;
import flash.net.URLRequest;
import flash.display.Sprite;

function loadNext(imgPath:String):void
var rq:URLRequest=new URLRequest(imgPath);
var l1:Loader=new Loader();
l1.contentLoaderInfo.addEventListener(Event.COMPLETE,loadComplete);
l1.load(rq);
function loadComplete(e:Event):void
{

//可以设置坐标 例如:
  l1.contentLoaderInfo.x=  l1.contentLoaderInfo.y=100;
  loadNext("2.jpg")
  addChild(l1);
}

loadNext("1.jpg");

TOP

图片又莫名其妙的全加载成功了.....真是崩溃
不过楼上的递归真是好办法

TOP

“ahui4367” 的递归方法好!

TOP

地跪不错

TOP

我也遇到过像你那样的问题,后来看到好几个例子,都是用递归的,似乎,这种问题只能用递归,如果哪为高人有其他方法的话告诉我一下,这里先谢谢了!

TOP

我来借鉴一下。。

TOP

一段很模糊的描述。。。也许就是本贴答案

来自flash帮助:由于 Loader 对象可以只包含一个子级,因此,发出后续 load() 请求将终止先前的请求,如果仍然存在未处理的请求,则会开始新的加载。

TOP