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

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.09.2013, 19:22
Argas вне форума Посмотреть профиль Отправить личное сообщение для Argas Найти все сообщения от Argas
  № 1  
Ответить с цитированием
Argas

Регистрация: Oct 2012
Сообщений: 35
Cool multi resolution

Доброго времени суток. Долго думал на эту тему и рассматривал несколько решений. Допустим. Пишу приложение, которое должно поддерживаться на всех android и iOS девайсах. При этом везде оно должно выглядеть красиво.
Отличная штука есть в Starling'e : AssetManager, через который грузятся картинки из нужной папки. И через scaleFacor скейлятся до нужного размера. Но все же разрешений много.. и отличаются они мало того что скейлом, но еще и шириной. Главный вопрос #1: каким образом оптимальней всего грузить изображения под разрешения всех девайсов?
Вариант который со старлинг-вики: сделать несколько наборов изображений (по ширине, и по 2 размера на каждую ширину). Итого будет 6 ассетов (минимум), что не хило скажется на размере инсталяшки. (Вопрос #2: а можно ли не включая картинки в установочный файл подгружать сразу нужные с сервера?)
Можно конечно упростить. Брать максимальную ширину в 2х скейлах, и использовать эти 2 ассета под все разрешения.
Теперь вопрос #3, касающийся формата картинок. Думаю использовать .PNG, но есть ли это оптимальное решение? было бы не плохо использовать векторную графику, без потери производительности, это возможно?

P.S: Искал рабочий пример с поддержкой всех дейвайсов, но так и не нашел красивого решения. Сам писал приложение, поддерживающее все iOS разрешения экранов, но это проще - там их мало.

upd: использую Citrus Engine

Заранее благодарю за помощь.

Старый 22.09.2013, 22:10
C4Grey вне форума Посмотреть профиль Отправить личное сообщение для C4Grey Найти все сообщения от C4Grey
  № 2  
Ответить с цитированием
C4Grey

Регистрация: May 2007
Сообщений: 181
Отправить сообщение для C4Grey с помощью ICQ Отправить сообщение для C4Grey с помощью Skype™
Вот отличная статья, в котороый описаны основные группы экранов разной плотности: http://habrahabr.ru/post/183836/
Ищем устройство с максимальным разрешением под определенную группу:
https://sites.google.com/site/yoursc...-ios-i-android
http://en.wikipedia.org/wiki/List_of..._pixel_density
Рисуем дизайн под это разрешение, при желании можно выделить некоторые элементы для экзотических разрешений(например, растровые шрифты, или изображения со светлым контуром на темном фоне выглядят отвртатительно даже при масштабировании от большего к меньшему). На выходе - от 3 до 5(если целиться на ldpi и xxhdpi) наборов изображений. На Google Play можно публиковать Multiple APKs, указывя в манифесте фильтр плотности экрана(впрочем, некоторые по старинке просто плодят приложения с названиями в стиле "Mega game HD", "Mega game super HD", и т.п.) - вариант годится для магазинов, где не реализованна возможность фильтрации(если не ошибаюсь - все, кроме Google Play). Таким образом, в дистрибутиве игры для конечного пользователя будут находиться только нужные ресурсы.

Если в игрушке много красивых фонов, покадровой анимации, крупных шрифтов(детская книжка, квест) - прийдется хорошенько извращаться с оптимизациями, иногда даже постоянная выгрузка всего и вся с постоянными указаниями gc/pauseForGCIfCollectionImminent не всегда спасает от падения приложения.

Несколько моментов, которые будут полезными для оптимизации:
1. Использовать масштабируемый UI на базе 9-patch шкурок, это есть в Feathers.
2. Использовать ATF-текстуры(размер дистрибутива может вырасти по сравнению с PNG), но памяти на них нужно выделять меньше.
3. Чистить оперативную память после загрузки ресурсов в видеопамять, игровые уровни загружать только после их выбора пользователем, тогда же желательно выгружать ненужные элементы UI - лучше показать на несколько секунд экран загрузки, чем получить отрицательную оценку из-за вылетающего приложения.
3. Использовать Distance field fonts, есть реализации, не требующие хитрых шейдеров и выдающие приличный результат в нужных пределах точности, иначе либо делать по растровому шрифту на каждое разрешение(они масштабируются довольно-таки некрасиво), либо использовать отрисовку векторных в текстуры, что приведет к перерасходу памяти.
4. Если используются свои шейдеры - страться сократить количество операций любой ценой(для примера, шейдер 2D-водички удалось сократить на 4 инструкции, сохранив некоторые константы в свободных каналах dudv-текстуры).
В общем, тут еще много всякого можно написать, но пока на этих вещах не набить шишки, оно все выглядит как "bla-bla-bla"

Старый 23.09.2013, 08:42
Argas вне форума Посмотреть профиль Отправить личное сообщение для Argas Найти все сообщения от Argas
  № 3  
Ответить с цитированием
Argas

Регистрация: Oct 2012
Сообщений: 35
благодарю за ответ, узнал много нового и полезного. Nine-patch текстуры, увы, не подходят: приложение - квест с кучей графики и анимации ). Хотя можно кнопки менюшки через них сделать.
По поводу :
Цитата:
В общем, тут еще много всякого можно написать, но пока на этих вещах не набить шишки, оно все выглядит как "bla-bla-bla"
- полезно это всё выглядит поэтому буду очень благодарен за дальнейшие советы по оптимизации такого рода)

Создать новую тему Ответ Часовой пояс GMT +4, время: 08:55.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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