Показать сообщение отдельно
Старый 11.10.2010, 19:38
iforev вне форума Посмотреть профиль Отправить личное сообщение для iforev Найти все сообщения от iforev
  № 1  
Ответить с цитированием
iforev

Регистрация: Jan 2008
Сообщений: 35
По умолчанию Скопировать LoaderInfo

Здравствуйте.

В моем проекте требуется загружать много файлов, я делаю это с помощью класса Loader. Я сделал 2 режима загрузки: последовательный и параллельный.

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


Код AS3:
contents[ev.target.loader.number] = ev.target
отмечу, что не использую функцию push, а записываю данные в ячейку по номеру потому, что при параллельной загрузке файлы могут перепутаться, если, например, 2-й будет меньшего размера, чем 1-й.

В массив, соответственно, добавляется не само содержимое, а ссылка на объект LoaderInfo загрузчика, т.к., кроме картинок я загружаю еще и другую флешку, из которой затем извлекаю классы через applicationDomain.

И тут я столкнулся с закономерной проблемой: поскольку в массиве хранится именно ссылка, а не сам объект, при загрузке нового файла, к старому обратиться уже не получится.

Подскажите, можно ли как-нибудь скопировать LoaderInfo загрузчика, чтобы при загрузке следующего файла сохраненная ссылка оставалась действительной?
Пробовал полное копирование объекта в виде

Код AS3:
contents[ev.target.loader.number] = clone(ev.target)
или даже

Код AS3:
contents[ev.target.loader.number] = clone(ev.target) as LoaderInfo
не помогло, при загрузке флешки выдается ошибка

Код:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
пробовал также использовать статический метод LoaderInfo.getLoaderInfoByDefinition, однако и это не дало результатов. Попытка сделать так:

Код AS3:
contents[ev.target.loader.number] = LoaderInfo.getLoaderInfoByDefinition(ev.target.content);
выдает ошибку

Код:
ReferenceError: Error #1065: Переменная MainLoader не определена.
	at flash.system::ApplicationDomain/getDefinition()
MainLoader - это класс в загруженной флешке.

Есть, конечно, простой вариант - использовать много загрузчиков для множества файлов и при последовательной загрузке, но он кажется мне неправильным, ведь в каждый момент времени всё= будет использоваться только 1.