空间外载SWF具有不同的高度AS3

时间:2011-02-17 13:13:27

标签: xml flash actionscript-3

我已经和它争吵了一段时间了,我正在将swf文件加载到一个持有者swf中,并希望将每个加载的swf放在另一个下方,并保持10px的余量。

这就是我到目前为止,它正确地提取所有数据现在只想定位加载的swfs。

非常感谢任何帮助。


import flash.display.LoaderInfo;

var swfLoader:Loader;
var xml:XML;
var xmlList:XMLList;
var xmlLoader:URLLoader = new URLLoader();

xmlLoader.load(new URLRequest("components.xml"));
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);

function xmlLoaded(event:Event):void
{
    xml = XML(event.target.data);
    xmlList = xml.children();
    for (var i:int = 0; i < xmlList.length(); i++)
    {
        swfLoader = new Loader();
        swfLoader.load(new URLRequest(xmlList[i].@SWFsource));
        swfLoader.contentLoaderInfo.addEventListener(Event.INIT, loaderInitHandler);
        addChild(swfLoader);
    }
}

function loaderInitHandler(event:Event):void
{
    var swfInfo:LoaderInfo = event.target as LoaderInfo;

    //THIS IS WHERE I WANT TO POSITION MY LOADED SWF'S.
    // I CAN TRACE THEIR HEIGHTS BUT NOT SURE HOW TO POSITION THEM IN Y

    trace(swfLoader.y = swfInfo.height)
}

1 个答案:

答案 0 :(得分:0)

使用swfLoader成员变量时会遇到麻烦:将每个加载器添加到舞台上,但swfLoader引用始终只指向一个对象(最后添加的对象)。

像这样定位剪辑也是有问题的,因为一次只能获得一个加载器引用,因此您将无法计算相对于其他加载器的位置。

如果除了加载器之外没有别的东西放在舞台上,你可以遍历主对象的子节点,但我强烈建议将剪辑存储在数组中。您的代码将如下所示:

var loaders:Array = []; // an Array of loaders instead of a single loader
var xml:XML;
var xmlList:XMLList;
var xmlLoader:URLLoader = new URLLoader();

xmlLoader.load(new URLRequest("components.xml"));
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);

function xmlLoaded(event:Event):void
{
    xml = XML(event.target.data);
    xmlList = xml.children();
    for (var i:int = 0; i < xmlList.length(); i++)
    {
        var swfLoader:Loader = new Loader(); // local instead of member variable
        swfLoader.load(new URLRequest(xmlList[i].@SWFsource));
        swfLoader.contentLoaderInfo.addEventListener(Event.INIT, loaderInitHandler);
    }
}

function loaderInitHandler(event:Event):void
{
    var swfInfo:LoaderInfo = event.target as LoaderInfo;
    var swfLoader:Loader = swfInfo.loader; 
    if (loaders.length > 0) {
        var lastLoader : Loader = loaders[loaders.length-1]; 
        swfLoader.y = lastLoader.y + lastLoader.height + 10; // positioning happens here
    }
    addChild(swfLoader);
    loaders.push(swfLoader);
}

加载器只会在完全加载时添加到舞台并推送到阵列上,因此您可以确定lastLoader始终是放置在舞台上的最后一个项目。您可以稍后使用加载器数组删除或重新定位图像。