Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Создание событий в цикле (http://www.flasher.ru/forum/showthread.php?t=186713)

Mafiy 07.11.2012 12:44

Создание событий в цикле
 
И так. Идея такова, в файле прописаны пути ко всем файлам 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);
        }
      }

По идеи можно сделать так, сначала загружаем полностью все файлы с параметрами объектов, потом грузим сами объекты а потом сделать функцию которая будет соединять соответствующие параметры с объектами. Но это лишняя функция с циклом.

AlexLucas 07.11.2012 16:14

То есть у вас есть один общий конфиг, а потом ещё индивидуальные конфиги каждого элемента? А не проще сразу всё в один конфиг закинуть?

И вы создайте очередь для загрузки , сначала один конфиг, ловите комплит, потом один элемент, ловите комплит и загружаете следующий конфиг + элемент итд. Тут очерёдность выберите как вам угодно, главное чтобы была вот такая вот очередь. Вы в цикле всё проматываете и у вас по ходу m_UrlLoader переписывается до completeLoadObjects.


Часовой пояс GMT +4, время: 15:53.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.