我有小问题。我正在使用Loader类动态加载JPG文件。一切正常,除非我想使用addChild(loader.content)将图像平铺几次,它只是不起作用。它总是删除前一个实例,只留下最后一个实例。我已经尝试了一切,但没有运气。这是我的代码:
var loaderContext:LoaderContext = new LoaderContext(true);
var imageLoader:Loader = new Loader();
imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaderDone);
var fileRequest:URLRequest = new URLRequest('http://127.0.0.1/blah/blah.jpg');
imageLoader.load(fileRequest, loaderContext);
var imageLoaderDone:Function = function(e){
var k:int = landHolder.numChildren;
while(k--) {
landHolder.removeChildAt(k);
}
var howManyTimes:int = Math.ceil(1000 / e.content.width);
var i:int = 0;
while(i < howManyTimes) {
var zombie:Sprite = new Sprite();
zombie.addChild(e.content);
zombie.x = i*zombie.width;
landHolder.addChild(zombie); //here's the problem, it does not duplicate
//landHolder is empty MovieClip placed on the stage
i++;
}
landHolder.alpha = 1
}
感谢。
答案 0 :(得分:5)
如果是加载图像,您可以简单地克隆其位图数据。
var loadedBitmap : Bitmap = e.content as Bitmap;
var clonedBitmap : Bitmap;
for(var i:Number = 0; i<100; i++) {
clonedBitmap = new Bitmap(loadedBitmap.bitmapData.clone());
clonedBitmap.x = i*clonedBitmap.width;
landHolder.addChild(clonedBitmap);
}
当您需要克隆多个简单图像时,其他建议的解决方案是很好的选择。
答案 1 :(得分:1)
加载的内容是DisplayObject的单个实例。你正在做的是围绕你在循环中创建的几个精灵移动这个实例。最后,你的实例被添加到最后一个精灵中,而其他所有精灵都是空的。
不同的可能性:
尝试为每个sprite容器设置一个不同的加载器 - 加载相同的资源。浏览器将缓存图像,因此不会从服务器多次加载它。
嵌入您的图片并创建多个实例。
搜索使用AS3复制显示对象的算法。
发现这个:http://www.kirupa.com/forum/showthread.php?223798-ActionScript-3-Tip-of-the-Day&p=1939827#post1939827但没有验证。我相信这里已经有解决方案。
另请阅读此答案:AS3: Copying a Loader from one object to another