Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   Выгрузка/перезагрузка swf под iOS (http://www.flasher.ru/forum/showthread.php?t=209342)

VisualDima 31.10.2014 23:08

Выгрузка/перезагрузка swf под iOS
 
Моя игра содержит очень много графического и звукового контента. А на iOS, насколько я знаю, весьма жесткие требования по использованию памяти. Но одновременно, весь контент в памяти и не нужен. Логичное решение - разделить контент на группы, рассовать по разным swf и перед запуском уровня загружать только те, что нужны. После прохождения уровня освобождать память. Провел эксперимент на PC и Android. Все работает: постоянные загрузки/выгрузки сначала заполняют память, но в какой-то момент сборщик мусора прочухивает и все остатки прибирает, освобождая память до начальных величин. В общем все ОК.
Но в документации Adobe по AIR есть кое-что про особенности работы iOS:
http://help.adobe.com/ru_RU/as3/dev/...0204-7e13.html
В разделе "Загрузка SWF-файлов в среде AIR для iOS" есть такой пунктик:
- Загрузка, выгрузка и повторная загрузка SWF-файла невозможна. При попытке выполнить эти действия возникнет ошибка.

Э? Там, конечно весь документ написан витиевато достаточно. Неужели в AIR под iOS нельзя организовать загрузку/выгрузку? Может я чего-то не так понял?

P.S. У меня пока нет iOS устройства, поэтому пока провести эксперимент не могу.

illuzor 01.11.2014 00:16

Вариант с хранением ресурсов не в swf рассматривали?
Обычно так и делают: графика в атласах, звуки/конфиги/прочее отдельными файлами.

VisualDima 01.11.2014 00:27

Графика в основном в виде анимаций (MovieClip), причем не тривиальных. Статических картинок почти нет.

illuzor 01.11.2014 00:41

В таком виде с производительностью всё в порядке?

http://gafmedia.com/ - этот сервис перегоняет мувиклипы в текстурные атласы, правда придётся всё на starling переводить. Не знаю, можете ли вы себе позволить подобные манипуляции.

VisualDima 02.11.2014 14:25

У меня проект - фактически является сиквелом-портом на мультиплатформу PC игры. Т.е. достаточно сложные и богатые анимации.
Я пробовал Stage3D (а Starling его использует), делал стресс-тесты и столкнулся с парой проблем:
1. PAPI плеер в Google Chrome весьма тормознутый и, судя по всему, и Adobe и Google упорно игнорируют проблему. (проблеме уже год наверно).
2. Испытывал мобильную версию стресс-теста на Samsung Galaxy S2 - очень низкий FPS на мобиле.
Примечание: использовались атласы изначально.

Как это не странно, чистый Flash (MovieClip) в мобильной версии в целом показал себя гораздо производительнее нежели Stage3D (хотя от некоторых эффектов придется отказаться или переделать)

Правда, я допускаю, что "просто не умею готовить" Stage3D и еще проведу несколько экспериментов с чистым Stage3D и со Starling.

Но в случае, что всетаки придется использовать чистый MovieClip хотелось узнать про подгрузку/выгрузку в iOS

Добавлено через 1 час 54 минуты
Ого! Я действительно "не умею готовить". Очевидно, мобильная видеосистема работает не так как DirectX на PC. Я изменил алгоритмы работы с VertexBuffer и IndexBuffer и мобильная версия стресс-теста стала уверенно показывать максимально возможные 60 FPS! (для мобильной версии и 30 достаточно).
Не знаю правда, удастся ли довести производительность Chrome до нормальной...

Тем не менее, главный вопрос остается в силе! Прояснить его может оказаться весьма полезным.

VisualDima 13.11.2014 18:32

Похоже нашел ответ вот в этом документе:
http://blogs.adobe.com/airodynamics/...r-apps-on-ios/
Там есть фраза:
Цитата:

Note: Reloading of pure asset SWFs will work with AIR 3.7 builds which can be downloaded from here
Т.е. если swf не содержит AS кода, а только графику, ее можно будет перезагрузить (начиная с версии AIR 3.7).

lexa2000lexa 17.11.2014 13:14

Я делал вот так
Код AS3:

_loader = new Loader();
                        if (Capabilities.manufacturer.indexOf("iOS") != -1) {
                                url = url +"?"+(new Date ()).getTime ()
                        }
                        _req = new URLRequest("pic/"+url)
                        var loaderContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain, null);
                        loaderContext.allowCodeImport = true;
                        _loader.load(_req,loaderContext)
                        _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);



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

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