|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
[Feathers] Загрузка графики в List
Есть два основных способа отображения большого количества графики в компоненте List: грузить все сразу Asset Manager`ом и потом добавлять DO как iconFunction:
myList.itemRendererProperties.iconFunction = function( item:Object ):DisplayObject { var img:Image = new Image(item.name); return img; }) либо посредством ImageLoader (пример галереи на сайте Feathers). Графика хранится в sprite seets и её очень много, порядка 500 картинок по 512х512. Если использовать первый способ, то минусы такие: 1. При запуске приложения ждем 10-20 сек. пока загрузятся все ассеты. 2. Все это хранится в оперативе и нет возможности выгрузить. Соответственно, отжирается огромное кол-во памяти, что приводит к глюкам другого функционала приложения. Плюсы: 1. Все отображается мгновенно и нет лагов при скролинге. Если юзать второй способ, то память свободна, но есть небольшие лаги при подгрузке изображений. Но самый большой минус и я не знаю как от него избавиться - как грузить ATF спрайтшитсами с помощью ImageLoader?
__________________
In Code We Trust |
|
|||||
Загрзука текстуры обычно вызывает небольшой лаг(создание массива байтов, чтение из него, загрузка в видеопамять). Кроме того, у некоторых(а с мобильным интернетом - у большинства) клиентов будет давать о себе знать лаг подгрузки изображения с удаленного сервера(если они не хранятся локально). Можно попробовать асинхронную загрузку ATF, но в тестах не заметил особого улучшения ситуации. Есть еще вариант со стриммингом, но он вряд ли будет корректно работать с атласами, качество у мипмап для GUI не годится(эта технология в первую очередь ориентирована на 3D, для организации LoD-рендера), да и предупреждают о росте объемов используемой памяти.
Хранить множество картинок в оперативной памяти можно, если это, например, демонстрационное приложение для стендов с тачскринами - там обычно наиболее важным параметром является презентабельный вид, а производительности вполне хватит. По поводу ImageLoader: вот в этом форке есть реализация работы с ATF, но лучше написать свой загрузчик. Там обычный URLLoader, бонусом будет более точный котроль за ресурсами(кэширование соседних картинок, предварительная загрузка следующих, пока юзер смотрит на текущий набор изображений). На месте картинок можно показывать некие стандартные фоны(например, стилизированный мужской/женский силуэт для аватарок) с индикатором прогресса, если его красиво вписать в дизайн приложения - юзера раздражать не будет. Да, загрузка атласов ничем не отличается от загрузки обычной текстуры, только нужно будет предварительно загрузить XML-описание атласа, можно тем же экземпляром URLLoader. |
|
|||||
Спасибо, C4Grey, за дельный совет.
Мне посоветовали как вариант создавать перезаписываемый отдельный инстанс AssetManager`а. Который будет постоянно обновляться только выбранными данными. Лаг однозначно будет, но нужно тестировать где больше: с ImageLoader или мини-AssetManager`ом. И спасибо за ваши либы и статьи в блоге. Помогают
__________________
In Code We Trust |
|
|||||
На этот счет можно попробовать использовать Workers для загрузки и обработки ассетов, а после передавать полученные картинки главному приложению в формате AMF.
Как показано в этом примере http://gotoandlearn.com/play.php?id=162 приложение работает в несколько потоков и обработка процессов не влияет на анимацию. По факту, Worker создает еще одну среду FlashPlayer'а и работает отдельно, соответственно увеличится объем потребляемой памяти на лишние 5Мб |
Часовой пояс GMT +4, время: 10:22. |
|
« Предыдущая тема | Следующая тема » |
|
|