通过addChild()多次重复加载器的内容?

时间:2011-08-18 08:58:47

标签: flash actionscript-3 actionscript

我有小问题。我正在使用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

}

感谢。

2 个答案:

答案 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的单个实例。你正在做的是围绕你在循环中创建的几个精灵移动这个实例。最后,你的实例被添加到最后一个精灵中,而其他所有精灵都是空的。

不同的可能性:

  1. 尝试为每个sprite容器设置一个不同的加载器 - 加载相同的资源。浏览器将缓存图像,因此不会从服务器多次加载它。

  2. 嵌入您的图片并创建多个实例。

  3. 搜索使用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

    或者:http://blog.andredickson.net/?p=56

    或者:Duplicate image with Haxe