如何在UILoader中添加两个UILoader并使用actionscript 3保存UILoader的内容

时间:2014-12-12 06:33:52

标签: actionscript-3 flash actionscript flash-cs5 uiloader

过去几个小时我一直在研究如何在UILoader中添加UILoader并保存UILoader的所有内容。我有两个UILoader实例(loader_inner和loader_outer),它们都是使用UILoader组件手动放置的。 代码如下:

loader_inner.load(new URLRequest("background_1.jpg"));
loader_outer.load(new URLRequest("rabbit.jpg"));
loader_outer.addChild(loader_inner);
var bitmapData:BitmapData = new BitmapData(loader_outer.width,loader_outer.height);
bitmapData.draw(loader_outer);
var jpgencoder:JPGEncoder = new JPGEncoder(100);
var mybyte:ByteArray = jpgencoder.encode(bitmapData);
var myfile:FileReference = new FileReference();
myfile.save(mybyte,"test.jpg");

问题出在保存期间,我只能看到文件中的白色图像而不是两个内容。我期待图像文件中有一只兔子的背景,它完全放在工作空间中手动绘制的两个组件上。

1 个答案:

答案 0 :(得分:1)

UILoader.load是一个异步操作。因此,您尝试在实际有机会加载图像之前将加载器绘制到位图。您需要在内部和外部加载器上监听COMPLETE事件:

import com.adobe.images.JPGEncoder;
import flash.display.Bitmap;
import flash.events.Event;

loader_inner.addEventListener(Event.COMPLETE, onLoadComplete);
loader_outer.addEventListener(Event.COMPLETE, onLoadComplete);
loader_inner.load(new URLRequest("background_1.jpg"));
loader_outer.load(new URLRequest("rabbit.jpg"));
loader_outer.addChild(loader_inner);

function onLoadComplete(e:Event):void 
{
    // check to make sure that *both* loaders have fully loaded
    if(loader_inner.percentLoaded && loader_outer.percentLoaded)
    {
        var bitmapData:BitmapData = new BitmapData(loader_outer.width,loader_outer.height);
        bitmapData.draw(loader_outer);
        var jpgencoder:JPGEncoder = new JPGEncoder(100);
        var mybyte:ByteArray = jpgencoder.encode(bitmapData);
        var myfile:FileReference = new FileReference();
        myfile.save(mybyte,"test.jpg"); 
    }
}