Использование векторов в iOS

#objective-c #cocoa-touch #ios #cocos2d-iphone #vector-graphics

#objective-c #cocoa-touch #iOS #cocos2d-iphone #векторная графика

Вопрос:

Я работаю над простой игрой для iOS, которая всегда рисует 5-10 слоев 32-битных изображений в формате png, для чего требуется достаточно памяти, чтобы на ipod touch 4g произошел сбой при включении retina. На других устройствах это работает просто отлично. Я даже не получаю предупреждений о памяти. Итак, я пробовал использовать изображения более низкого качества, например формат RGB5_A1, но это выглядит действительно плохо, потому что мне нужна альфа-прозрачность и много градиентов.

Поскольку все изображения экспортируются из Illustrator, я подумал, что, возможно, я мог бы просто экспортировать векторное изображение и рисовать на iOS. Из того, что я исследовал, вряд ли кто-нибудь пробовал это, и единственным вариантом, с которым я столкнулся, была реализация синтаксического анализатора SVG для Quartz.

Я что-нибудь пропустил? Также я беспокоюсь о производительности, но я не смог найти никаких тестов.

Комментарии:

1. Я думаю, вам следует начать оптимизировать свой код. Если iTouch с дисплеем retina не справляется с этим, вы делаете что-то неправильно. Даже такие игры, как SupCom2, которые намного сложнее вашей, не используют столько оперативной памяти

2. Webkit поддерживает SVG. Я думаю, вам следует взглянуть на это, чтобы увидеть, может ли это удовлетворить ваши потребности.

3. @Antwan van Houdt, JeremyP У меня есть 1 текстура с разрешением 2048×2048 пикселей и две 2048×1024 пикселей. Приложение простое, но в нем много контента, потому что это конфигуратор для аватаров, и ему нужны действительно четкие градиенты и прозрачность

4. чувак, 2048 пикселей, о чем ты думаешь? Это слишком много. Экран iphone имеет максимальное разрешение 640×960, а ipad — где-то около 1024x с чем-то

5. Я использую texture atlas с cocos2d, это не просто одно изображение на этих текстурах, а многие, которые объединяются в одно изображение в зависимости от того, что выбирает пользователь

Ответ №1:

Не зная особенностей вашей игры, я собираюсь сделать несколько предположений, основанных на обычном использовании…

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

Если вы говорите о 32-битном цветовом пространстве для ваших изображений PNG, то вам нужно уменьшить масштаб. iOS использует 24-разрядные изображения, включающие по 8 бит для красного, зеленого, синего и альфа-символов. В нынешнем виде у вас есть дополнительный байт на каждый отображаемый пиксель.

Если вы используете продукты Adobe, импортируйте файл Illustrator в Photoshop и используйте опцию «Сохранить для веб …». Выберите PNG-24, и все будет готово.

Комментарии:

1. Красный, зеленый, синий и альфа — это четыре канала, каждый из которых имеет восемь бит. Всего их 32. 😉

2. Да, где моя голова? Предустановка экспорта PNG в Photoshop называется PNG-24. Хммм… Тем не менее, остальная часть сообщения все еще остается в силе. Не должно вызывать проблем с производительностью.