![]() |
|
||||||||||
|
|
|
|||||
|
Пишу игру. В ней есть класс library. В нем хранятся все игровые объекты(загруженные loader-ом swf файлы). При надобности из этого класса library эти объекты копируются другими loader-ми, например:
Запустил, попробовал, все работает. Как видно все объекты в классе library содержатся в массиве, каждый элемент которого Loader. После этого я решил сделать проще(не знаю правильно это или нет), и сделать массив не Loader, а сразу ByteArray-в. Реализация: То есть теперь можно загружать объекты так: Нажимаю Test Movie, все работает. Делаю Publish, запускаю swf файл и вот что происходит: Должно вывестись на экран 23 одинаковых объекта, взятых из library, но отображается только 7, и выводится много ошибок, что формат загруженного файла неизвестен и тд. Почему возникает такая ошибка?
__________________
Я не злопамятный, я запишу |
|
|||||
|
Дожидаюсь. Если бы не дожидался, то и при Test Movie ничего тоже не работало.
__________________
Я не злопамятный, я запишу |
|
|||||
|
Игра уже довольно большая, весь код писать нету смысла, но постараюсь все моменты связанные с этой библиотекой выложить:
Создание: А вот сам код загрузки библиотеки. //начало загрузки библиотеки public function library():void { load(url);//загрузка txt файла с путями ко всем элементам библиотеки addEventListener(Event.COMPLETE, loadElements); } //загрузка элементов private function loadElements(e:Event):void { libraryURL=this.data.split('\n');//создается масив url адресов for (i=0; i<libraryURL.length; i++) {//проход по всем url адресам libraryURL[i]=libraryURL[i].substring(0,libraryURL[i].length-1);//так-как все элементы в файле написанны с новой строчки, удаляем последний символ пробела в каждом url url.url=libraryURL[i];//задаем url загружаемого файла libraryContent[i]= new Loader();//в массив, который в последствии и будет содержать ByteArray-и libraryContent[i].load(url);//загружаем libraryContent[i].contentLoaderInfo.addEventListener(Event.COMPLETE, counter); } function counter(e:Event):void {//функция вызывается при загрузке каждого элемента, тоесть столько раз, сколько было элементов j++;//счетчик сколько элементов загружено if (j==libraryURL.length) {//если кол загруженых элементов равно числу всех элементов то делать: for (i=0; i<libraryURL.length; i++) {//перебираем все элементы libraryContent[i]=libraryContent[i].contentLoaderInfo.bytes;//каждому из этих элементов присваиваем ByteArray } dispatchEvent(libraryLoadComplite);//событие конец загрузки } } }
__________________
Я не злопамятный, я запишу |
|
|||||
|
.
|
Попробуйте использовать отдельный экземпляр URLRequest для каждого Loader.
Цитата:
Используйте какую-либо готовую библиотеку массовой загрузки, например, Bulkloader или LoaderMax. |
|
|||||
|
Объясню еще раз. Тот код, который я написал выше, работает только, если я запускаю его во flash(Ctrl+Enter). В программе должно происходить следующее - загружаться swf, и размножится 23 раза. Нажимаю Ctrl+Enter - все отлично, все 23 объекта есть. Нажимаю Publich, закрываю flash, запускаю swf созданный при Publich-е и он загружает объект, клонирует 7 раз, а оставшиеся 16 раз не клонирует и выдает 16 одинаковых ошибку подряд - Error #2044: Необработанный IOErrorEvent:. text=Error #2124: Неизвестный тип загруженного файла.
__________________
Я не злопамятный, я запишу Последний раз редактировалось StasMIX; 31.10.2011 в 17:07. |
|
|||||
|
.
|
Есть вариант ограничить количество одновременно загружаемых файлов 3-5 потоками.
Добрее немножко, пожалуйста. Я тоже не злопамятный. |
|
|||||
|
Спасибо, обязательно попробую.
__________________
Я не злопамятный, я запишу |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:30. |
|
|
« Предыдущая тема | Следующая тема » |
|
|