Нужна помощь в оптимизации моего 2d рисунка на iPhone - PullRequest
1 голос
/ 17 июня 2009

Я пишу игру, которая отображает 56 шестигранных фигур, заполняющих экран в форме доски. В настоящее время я рисую каждую часть с помощью одноэлементного класса рендеринга, который при вызове для рисования части создает путь из 6 точек на основе переданной координаты. Этот путь заполнен сплошным цветом, а затем 59x59 png с альфа-каналом для белый градиент накладывается на рисунок, чтобы придать образу блестящий вид. Обратите внимание, что в настоящее время я делаю это в Core Graphics.

Моя первая мысль состоит в том, что создание пути каждый раз, когда я рисую, является дорогостоящим, и кажется, что я могу как-то сделать это один раз, а затем использовать его повторно, но я не уверен в наилучшем подходе для этого. Когда я смотрю на узкие места с Акулой, кажется, что рисование PNG - самая сложная часть процесса. Я попытался просто отрисовать оверлей png или просто отрисовать путь без оверлея, и оба дают мне некоторое усиление кадра, хотя удаление оверлея png дает большинство кадров.

Моя текущая мысль заключается в том, что при запуске я должен отрисовать 6 контуров (по 1 для каждого имеющегося у меня цветного фрагмента) и наложить их на png, а затем сохранить изображение этих фрагментов, а затем просто перерисовывать фрагменты каждый раз, когда они мне понадобятся , Есть ли эффективный механизм для хранения того, что вы когда-то рисовали, и перерисовывания? Это просто звучит так, как будто я снова слишком часто сталкиваюсь с рисованием pngs, но, возможно, есть менее затратный метод, который делает подобное ...

Любые предложения очень ценятся. Спасибо!

Ответы [ 5 ]

1 голос
/ 18 июня 2009

Вы также можете посмотреть на cocos2d . Кажется, это значительно быстрее, чем использование CoreAnimation в моих тестах, и предоставляет много полезных вещей для игр.

1 голос
/ 17 июня 2009

Вы можете попробовать CGLayer или CALayer .

1 голос
/ 17 июня 2009

Если вам действительно нужна скорость, вы должны идти по маршруту OpenGL. Будьте осторожны, если вы хотите смешать OpenGL и Core Animation, они могут конфликтовать.

OpenGL - это боль, если вы с ней мало что сделали. Похоже, вы можете использовать Core Animation и сделать каждую плитку слоем. CA больше не вызывает перерисовку, пока вы что-то не измените, поэтому вы можете просто перемещать этот слой без особого удара. Также обратите внимание, что CA хранит слой в памяти текстур, поэтому он должен быть намного быстрее.

1 голос
/ 17 июня 2009

Некоторые другие упоминали, что вы должны использовать OpenGL. Вот хорошее введение специально для iPhone: OpenGL ES с нуля: Содержание

1 голос
/ 17 июня 2009

Общие мысли:

  • Для программирования игр на iPhone обычно требуется OpenGL. С Core Graphics работать немного проще, но OpenGL оптимизирован для скорости.
  • Как можно больше визуализируйте этот «блестящий вид» в текстурах (например, сделайте это в Photoshop, прежде чем даже вставить их в свой проект). Альфа-смешение - ад по производительности.
  • Возможно, попробуйте PVRTC (также это учебное пособие ), поскольку этот формат используется производителем графического процессора iPhone. Опять же, это может ухудшить ситуацию в зависимости от того, где находится ваше узкое место.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...