Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > Jarproger

Оценить эту запись

Универсальный загрузчик данных для AS 3.0

Запись от Jarproger размещена 10.03.2011 в 16:05
Обновил(-а) Jarproger 10.03.2011 в 18:01

Я написал класс, который решает 3 важные задачи:
  1. Позволяет массово загружать данные из сети и получать событие о загрузке всех данных
  2. Расширяем на разные типы данных, от jpg,png картинок, до xml и 3ds (хотя последний пока не поддерживается, но вы сами можете добавить нужные типы объектов). Внешне мы не видим отличия, хотя внутренне всё не просто.
  3. Прост в использовании, несмотря на внутренне сложную реализацию

Этот класс основан на использовании URLLoader
Использование очень простое:

Код AS3:
var lib:Library=new Library();//Создаём библиотеку
lib.add("model.xml",XML);   //Добавляем любое количество внешних URL на ресурсы
lib.add("img.png",Bitmap); Не забываем указывать класс, к которому требуется привести данные 
//...И так далее
 
lib.addEventListener(lib.DONE,fun);//Событие конца загрузки
lib.load();//Стартуем :)
 
//...После наступления события DONE
lib.data("model.xml")  //Возвращает XML - объект
lib.data("img.png")  //Возвращает Bitmap, который можно добавлять в список отображения
Вложения
Тип файла: zip library.zip (3.5 Кб, 196 просмотров)
Всего комментариев 23

Комментарии

Старый 10.03.2011 16:12 etc вне форума
etc
 
Аватар для etc
Старый 10.03.2011 17:01 in4core вне форума
in4core
 
Аватар для in4core
Цитата:
lib.addEventListener(fun,lib.DONE);//Событие конца загрузки
а не
Код AS3:
lib.addEventListener(lib.DONE, fun);//Событие конца загрузки
Случаем ? )))

Цитата:
lib.data("model.xml") //Возвращает XML - объект
lib.data("img.png") //Возвращает Bitmap, который можно добавлять в список отображения
Ну а это ваще жесть!!! Хотябы ограничились именем без .png и т.д.
Слишком мало событий. Где евенты прогресса, начала и т.д. ? они вообще там есть? Чем расширен класс?
Слишком мало методов, а точнее их и нет)) Пользователю явно хотелось бы :

get List
set List
getItemAt
setItemAt
stop();
destroy();
......
можно еще много что написать, того что нужно было бы
Старый 10.03.2011 17:43 cleptoman вне форума
cleptoman
 
Аватар для cleptoman
in4core, в очередной раз пернуть в лужу - это про тебя, ага..ты хоть класс смотел сам?

то автор:

трэш в чистом виде )
1 - зачем каждый раз гонять циклы, если можно сделать дикшнри , где ключ будет имя файла, а значением его лоадер?
2 - именоване свойств:
Цитата:
public var getSize:Boolean
о_О
3 - мало контроля со стороны юзера вашего класса
Код AS3:
private function errorListener(e:IOErrorEvent):void {
	trace("Ошибка загрузки!!! " + e.text);
}
ну почему бы не редиспатчить?
4 - вы явно указываете тип, который должен прилететь в ответе. так почему бы сразу не определить чем грузить и как обработать? (стратегия). зачем вам URLLoader, если есть Loader?
5 - каменты рулят
Код AS1/AS2:
var _allGetSize:Boolean = true;//Предположение, что все объекты начались загружаться
это, блин, что угодно, но не предположение )
Старый 10.03.2011 17:52 Jarproger вне форума
Jarproger
 
Аватар для Jarproger
МДА... смысл моего класса, чтобы УПРОСТИТЬ загрузку ресурсов
Это нужно для игр. Например, 3ds-модель не подгрузить Loader-ом. А jpg - сложно URLLoader-ом
Если у нас есть список ресурсов, которые, например, нужны для уровня, то как их подгружать?
Поочерёдно юзать лоадер и урллоадер?
Старый 10.03.2011 17:59 Jarproger вне форума
Jarproger
 
Аватар для Jarproger
cleptoman, 1)на низком уровне будут те же циклы. И использовать Object - это как-то не по AS3, скорее AS2
2)Это сделано для полосы загрузки. если мы ещё не знаем суммарный размер всех файлов, то как рассчитаем, сколько процентов загружено?
3)Я только версию 1.0 выпустил, конечно ляпов много. Пожалуй, здесь действительно следует доработать
4)Я так хотел с начала сделать, но там всё сложнее. Легче подгружать одним URLLoader и потом дорабатывать
5)Это алгоритмика. Сначала флаг тру,потом, если в цикле какой-то объект не начал грузиться, то он будет фалс. А если все начали - предположение верно. Хотя коммент кривой. правильно, думаю
var _allGetSize:Boolean = true;//Предположение, что для всех объектов получен их размер
Старый 10.03.2011 18:11 Jarproger вне форума
Jarproger
 
Аватар для Jarproger
in4core, ваш комментарий совсем не в тему
Расширения специально включаются в идентификатор. Например, у нас есть model.3ds и model.png - сама модель и её превъюшка, дальше можно не объяснять

etc, я код с нуля сам писал. Если такой класс уже есть, мне всё равно
Старый 10.03.2011 18:26 cleptoman вне форума
cleptoman
 
Аватар для cleptoman
1 -ну пусть бы на низком и крутились бы себе, зачем захламлять то? )
2 - зачем классу загрузчику рулить еще и прогрессбаром? выплюнули прогресс ивент и забыли...пусть выше разбираются что с этим делать.
Цитата:
Легче подгружать одним URLLoader и потом дорабатывать
чем?
у вас ярко выраженно следующее: разное поведение класса в зависимости от заданных параметров (битмап или текст). сразу задали как что должно работать и забыли.
Старый 10.03.2011 18:28 Bgg вне форума
Bgg
 
Аватар для Bgg
Цитата:
И использовать Object - это как-то не по AS3, скорее AS2
Не понял почему.
Старый 10.03.2011 18:35 in4core вне форума
in4core
 
Аватар для in4core
@cleptoman иди воруй!
Цитата:
Расширения специально включаются в идентификатор.
Так это не удобно пользователю. Посмотрите bulkLoader как там организовано
Старый 10.03.2011 19:30 GBee вне форума
GBee
 
Аватар для GBee
В идеале действительно какой-нить ключ передавать, ключ ссылка, хоть и уникально, но не очень.
Старый 10.03.2011 19:32 etc вне форума
etc
 
Аватар для etc
in4core, походу вы себе не представляете файлов без расширений или с контентом, совсем не соответствующим расширению. Я уже не говорю про выдачу потока с сервера по произвольному url.
Поэтому прежде чем давать какие-то советы, для начала нужно иметь голову на плечах.
Старый 10.03.2011 19:44 in4core вне форума
in4core
 
Аватар для in4core
Цитата:
in4core, походу вы себе не представляете файлов без расширений или с контентом, совсем не соответствующим расширению.
Такое ощущение что мы говорим о разных вещах. Я лично говорил о том, что не очень приемлимо потом искать файл - по ключу соотв имени файла + расширение. Тоесть
Код AS3:
addFile('image.jpg', 'private)  // добавили
Потом получаем после загрузки
Код AS3:
getFile('private')
Так удобнее.

Иди другой вариант, как я написал изначально

Код AS3:
addFile('image.jpg');
getFile('image');
Вот я о чем если не поняли))
А
Код AS3:
addFile('image.jpg');
getFile('image.jpg');
Неудобно по многим причинам. Одна из них, что я должен помнить имя файла , а так же его расширение.
Представим такой пример, что данные я получаю с XML в котором массив картинок, разных расширений, и нод в котором указано имя картинки. В случае автора я обязан знать ВСЕ, как имя так и фамилию. В моем же случае достаточно только имени.
Старый 10.03.2011 19:51 gr_crd вне форума
gr_crd
 
Аватар для gr_crd
Код AS3:
addFile('image.jpg');
addFile('image.png');
addFile('image.gif');
 
getFile('image'); // ой
Старый 10.03.2011 20:02 in4core вне форума
in4core
 
Аватар для in4core
@gr_crd это ясно. Поэтому в таких вещах используют систему
Код AS3:
addFile('image.jpg', 'private')  // добавили
как например в MultiPartLoader
Старый 10.03.2011 20:05 in4core вне форума
in4core
 
Аватар для in4core
@gr_crd да и кстати если смотреть глобально , то только такой вариант будет эффективен, пример :

Код AS3:
addFile('http://www.com/image.jpg');
addFile('http://www.com1/image.jpg');
Ага, ой

Но автор же ищет по ПОЛНОМУ имени, поэтому у него все ОК. Ага
Код AS3:
addFile('http://www.syte.com/folder1/folder5/floderN....../image.jpg');
ой как удобно искать то )))
Старый 10.03.2011 20:18 i.o. вне форума
i.o.
 
Аватар для i.o.
Цитата:
ой как удобно искать то )))
переменные, константы... Не?
Старый 10.03.2011 21:10 Jarproger вне форума
Jarproger
 
Аватар для Jarproger
Смысл в том, чтобы сама прога подгружала xml-файл игрового уровня, например level1.xml, и от туда извлекала все необходимые ресурсы. А сам файл будет создавать редактор уровней. Поэтому имеет смысл задавать полный URL. Чтобы игра смогла качать ресурсы с других сайтов.
Старый 10.03.2011 21:40 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Цитата:
на низком уровне будут те же циклы.
Как много Вы знаете о хэшах )
Цитата:
И использовать Object - это как-то не по AS3, скорее AS2
Всё в AS3 наследуется от Object. Речь идёт о строковом хэше? Тем более глупость.
Старый 10.03.2011 22:26 expl вне форума
expl
Цитата:
Всё в AS3 наследуется от Object
Эта одна из "интересных" особенностей языка - все приводится к Object, но только динамические классы имеют хеш-таблицу, что есть у самого обжекта. Всмысле хорошо, что не имеют, плохо, что она у Object'a есть (компилятор спокойно дает создавать поля, например у числа, которое привели к Object, но в рантайме флешплеер падает)

Цитата:
И использовать Object - это как-то не по AS3, скорее AS2
Чистый обжект - это нативная реализация хеш-таблицы, что плохого в использовании нативного хеша?

По сабжу:
Цитата:
//<-- Можно расширить класс на загрузку других объектов
Нарушение принципа открытия/закрытия в чистом виде. Библиотечный класс не должен расширяться путем правки его кода - только дописанием нового через наследование/композицию. Как пользователи будут обновления вашей либы забирать, если они уже что-то "расширили"?
Цитата:
trace("тип данных " + loader._class + " не поддерживается для " + loader.url);
И как мне узнать что что-то не загрузилось и надо вывести заглушку вместо картинки?
короче продолжать можно долго - НЕ ВЗЛЕТИТ


Цитата:
if(progressBar){
progressBar.setProgress(bytesLoaded, bytesTotal);
}
Впринципе, не самая плохая часть кода, т.к. реализация прогресс-бара не зашита и можно подставить все что нужно - может оказаться удобнее чем диспетчить события.
Но елы палы, почему тип прогресс-бара *? Вы за заставляете пользователя забираться внутрь либы и смотреть какие поля там используются. Интерфейс IProgressHandler должен быть с методом setProgress.
Обновил(-а) expl 10.03.2011 в 22:49
Старый 11.03.2011 01:42 Котяра вне форума
Котяра
 
Аватар для Котяра
2 in4core - здорово, что у нас на сайте есть такие люди. Повышает посещаемость и количество холиваров.
Респект и Уважуха.
По теме: номуль для конкретного проекта. Но вносит свои рамки. Как и любой фрэймворк. Желательно эти рамки описать.
Старый 11.03.2011 14:42 Хемуль вне форума
Хемуль
 
Аватар для Хемуль
2 etc:
Спасибо за ссылку на BulkLoader.

У expl всё очень доходчиво написано. Последующей поддержки класса не будет, написано для себя, под отдельный проект.

PS: Идея открытия блогов на Флешере гениальна. В камментах много интересного, весёлого, забавного.
Иногда жалею, что не всегда есть время, чтобы зайти на Флешер и просто почитать блоги, темы, узнать про какие-то новые решения и т.п.
Старый 11.03.2011 14:43 Rzer вне форума
Rzer
 
Аватар для Rzer
Я придерживаюсь мнения, что нужно два отдельных сервиса: 1) загрузчик файлов по их URL 2)Система ресурсов где каждому файлу, дано имя. И где контролируется процесс и время загрузки. (загружаются ресурсы до запуска программы или всё таки загружаются во время выполнения)

Второй сервис строится на основе первого.
Обновил(-а) Rzer 11.03.2011 в 14:46
Старый 12.03.2011 14:30 expl вне форума
expl
Цитата:
И где контролируется процесс и время загрузки
Как же это проконтроллировать внутри ресурсного движка. Ведь что в какое время грузить может знать только программа?
Все что может сделать движок - это обеспечить очередь с приоритетом и ограничение на количество одновременных загрузок, не?

Можно всётки поподробнее?
Цитата:
1) загрузчик файлов по их URL
У приложения обычно несколько типов ресурсов (просто картинка, анимация, набор кадров, пакет с другими ресурсами)
Как по URL определяется какой загрузчик (URLLoader/Loader/..) выбрать, а главное каким парсером обработать загруженное для использования в приложении?
Цитата:
2)Система ресурсов где каждому файлу, дано имя.
Всмысле есть мнемоническое имя и ему назначается в какой-то карте url или как?
Обновил(-а) expl 12.03.2011 в 14:50
 

 


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


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