Космически загруженные swfs с разной высотой AS3 - PullRequest
0 голосов
/ 17 февраля 2011

Я уже давно борюсь с этим, я загружаю SWF-файлы в SWF-файл держателя и хочу расположить каждый загруженный SWF-файл под каждым из них с полем в 10 пикселей.

Это то, что я имею до сих пор, теперь он корректно загружает все данные, просто хочет разместить загруженные SWF-файлы.

Любая помощь очень ценится.


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 голосов
/ 17 февраля 2011

Вы столкнетесь с проблемами при использовании переменной-члена 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 всегда является последним последним элементом, который былразмещены на сцене.Позже вы можете использовать массив loaders для удаления или изменения расположения изображений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...