И так. Идея такова, в файле прописаны пути ко всем файлам swf и sea(3д модельки), которые использует проект.
Загружаю этот файл:

Код AS3:
private function LoadObjects():void
{
m_ObjLoader = new URLLoader(new URLRequest(HOME_DIR + "/objects"));
m_ObjLoader.addEventListener(Event.COMPLETE, completeLoadProperties);
}
По окончанию загрузки, загружаю файлы с описанием объектов по очереди. Функцией completeLoadProperties грузим файлы с описанием объектов.

Код AS3:
private function completeLoadProperties(event:Event):void
{
countObject = 0; //счетчик объектов
m_aObjects = JSON.parse(m_ObjLoader.data); //парсим JSON данные файла objects
//Перебираем все файлы с описанием объектов и загружаем. Собственно сам цикл
for (key in m_aObjects)
{
countObject++;
m_UrlLoader = new URLLoader(new URLRequest(HOME_DIR + "/" + m_aObjects[key].category + "/" + m_aObjects[key].name));
m_UrlLoader.addEventListener(Event.COMPLETE, completeLoadObjects);
}
}
После загрузки файла с параметрами грузим объект. объекты двух типов - 3D модель в формате sea и swf.

Код AS3:
private function completeLoadObjects(event:Event):void
{
//m_UrlLoader.removeEventListener(Event.COMPLETE, completeLoadObjects);
if (m_aObjects[key].type == "sea")
{
m_Sea = new SEA3D();
m_Sea.load(new URLRequest(HOME_DIR + "/" + m_aObjects[key].category + "/" + m_aObjects[key].name + "." + m_aObjects[key].type));
m_Sea.addEventListener(Event.COMPLETE, completeLoad);
}
else
{
m_Loader = new Loader();
m_Loader.load(new URLRequest(HOME_DIR + "/" + m_aObjects[key].category + "/" + m_aObjects[key].name + "." + m_aObjects[key].type));
m_Loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeLoad);
}
}
Проблема вот в чем. Функция completeLoadProperties выполняется несколько раз только для последнего элемента цикла, но если все события влепить в цикл, тогда работает все нормально:

Код AS3:
private function completeLoadObjects(event:Event):void
{
countObject = 0;
m_aObjects = JSON.parse(m_ObjLoader.data); //парсим JSON данные файла objects
//Перебираем все объекты и загружаем
for (var key:String in m_aObjects)
{
countObject++;
m_Loader = new Loader();
m_Loader.load(new URLRequest(HOME_DIR + "/" + m_aObjects[key].category + "/" + m_aObjects[key].name + "." + m_aObjects[key].type));
m_UrlLoader = new URLLoader(new URLRequest(HOME_DIR + "/" + m_aObjects[key].category + "/" + m_aObjects[key].name));
m_Loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeLoad);
m_UrlLoader.addEventListener(Event.COMPLETE, completeLoad);
}
}
По идеи можно сделать так, сначала загружаем полностью все файлы с параметрами объектов, потом грузим сами объекты а потом сделать функцию которая будет соединять соответствующие параметры с объектами. Но это лишняя функция с циклом.