LoaderMax в дочернем SWF

У меня есть 2 дочерних SWF, загружаемых в родительский SWF. Каждый дочерний SWF-файл загружает свой собственный XML-файл. Когда я загружаю дочерние SWF-файлы, я получаю нулевое значение, потому что они еще не загрузили свои XML-файлы. Я использую Гринсок LoaderMax. В любом случае родитель должен знать, когда все дочерние XML-файлы были загружены.

1 ответ

Похоже, вы не хотите считать детей, когда они загружаются, а, скорее, когда дети закончили загружать некоторый XML. Попробуйте сначала создать класс для каждого / всех ваших детей, которые будут загружать xml, что-то вроде:

package  {
    import flash.display.MovieClip;

    public class ChildToLoad extends MovieClip{

        public function ChildToLoad() {
            // Load xml here, optionally use URLLoader or XMLLoader,
            // but regardless of what you use, listen for when XML load 
            // is complete and handle it with the loadComplete() function
            ...
            someXMLLoader.addEventListener(Event.COMPLETE, loadComplete);
            ...
        }

        private function loadComplete(evt:* = null)
        {
            var padre:MovieClip = parent as MovieClip;
            padre.childLoaded(); // Call function of parent
        }
    }
}

Затем в вашем основном SWF (ваш родитель) сделать что-то вроде:

var child1:ChildToLoad = new ChildToLoad();
var child2:ChildToLoad = new ChildToLoad();
addChild(child1);
addChild(child2);

var loadedChildrenCount:int = 0;

function childLoaded() // Called by all children after they load XML
{
    trace("childLoaded()");
    loadedChildrenCount++;

    if(loadedChildrenCount == 2)
    {
        trace("All children have loaded! Do Stuff!");
    }
}

Тем не мение; Если я читаю слишком много в ваш вопрос...

LoaderMax имеет onChildComplete обработчик вы можете использовать

Функция обработчика для событий LoaderEvent.CHILD_COMPLETE, которые отправляются каждый раз, когда один из дочерних элементов загрузчика (или любого потомка) завершает загрузку успешно. Убедитесь, что ваша функция onChildComplete принимает один параметр типа LoaderEvent (com.greensock.events.LoaderEvent).

Вы можете попробовать что-то вроде:

var childrenLoadedCount:int = 0;
var queue:LoaderMax = new LoaderMax({
    onChildComplete:AChildWasLoaded,
    TODO:AddYourOtherArgumentsHere
}); 
...
function AChildWasLoaded(evt:LoaderEvent) 
{
    childrenLoadedCount++;
    if(childrenLoadedCount = 2)
    {
        // All children have loaded
    }
}

Прочитайте документы для большего количества вариантов

Другие вопросы по тегам