Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проблемы с ByteArray (http://www.flasher.ru/forum/showthread.php?t=170708)

StasMIX 31.10.2011 01:01

Проблемы с ByteArray
 
Пишу игру. В ней есть класс library. В нем хранятся все игровые объекты(загруженные loader-ом swf файлы). При надобности из этого класса library эти объекты копируются другими loader-ми, например:
Код AS3:

loader.loadBytes(lib.libraryContent[0].contentLoaderInfo.bytes)

Запустил, попробовал, все работает. Как видно все объекты в классе library содержатся в массиве, каждый элемент которого Loader. После этого я решил сделать проще(не знаю правильно это или нет), и сделать массив не Loader, а сразу ByteArray-в. Реализация:
Код AS3:

libraryContent[i]=libraryContent[i].contentLoaderInfo.bytes;

То есть теперь можно загружать объекты так:
Код AS3:

loader.loadBytes(lib.libraryContent[0])

Нажимаю Test Movie, все работает. Делаю Publish, запускаю swf файл и вот что происходит: Должно вывестись на экран 23 одинаковых объекта, взятых из library, но отображается только 7, и выводится много ошибок, что формат загруженного файла неизвестен и тд.
Почему возникает такая ошибка?

dimarik 31.10.2011 10:07

Вероятно потому, что не дожидаетесь окончания загрузки swf-файлов.

StasMIX 31.10.2011 11:24

Дожидаюсь. Если бы не дожидался, то и при Test Movie ничего тоже не работало.

dimarik 31.10.2011 11:39

По представленным примерам сложно судить. Выложите минимальный пример с загрузкой и обработкой файлов.

StasMIX 31.10.2011 12:00

Игра уже довольно большая, весь код писать нету смысла, но постараюсь все моменты связанные с этой библиотекой выложить:
Создание:
Код AS3:

lib = new library();
lib.addEventListener('libraryLoadComplite', gameStart);

А вот сам код загрузки библиотеки.
Код AS3:

//начало загрузки библиотеки
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);//событие конец загрузки
                }
        }
}

Пример использования приводил выше.

dimarik 31.10.2011 13:04

Попробуйте использовать отдельный экземпляр URLRequest для каждого Loader.

Цитата:

...что формат загруженного файла неизвестен и тд.
Ошибка возникает, если загруженные данные не swf, jpeg, png или gif форматов. Про "и т.д." подробнее расскажите. Какие еще ошибки подразумевались?

Используйте какую-либо готовую библиотеку массовой загрузки, например, Bulkloader или LoaderMax.

StasMIX 31.10.2011 17:04

Цитата:

Сообщение от dimarik (Сообщение 1042728)
Ошибка возникает, если загруженные данные не swf, jpeg, png или gif форматов. Про "и т.д." подробнее расскажите. Какие еще ошибки подразумевались?

Объясню еще раз. Тот код, который я написал выше, работает только, если я запускаю его во flash(Ctrl+Enter). В программе должно происходить следующее - загружаться swf, и размножится 23 раза. Нажимаю Ctrl+Enter - все отлично, все 23 объекта есть. Нажимаю Publich, закрываю flash, запускаю swf созданный при Publich-е и он загружает объект, клонирует 7 раз, а оставшиеся 16 раз не клонирует и выдает 16 одинаковых ошибку подряд - Error #2044: Необработанный IOErrorEvent:. text=Error #2124: Неизвестный тип загруженного файла.

dimarik 31.10.2011 21:45

Есть вариант ограничить количество одновременно загружаемых файлов 3-5 потоками.

Добрее немножко, пожалуйста. Я тоже не злопамятный.

StasMIX 01.11.2011 15:47

Спасибо, обязательно попробую.


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

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