Проблемы с производительностью на iPhone с использованием простой графики - PullRequest
0 голосов
/ 24 февраля 2009

Мы работаем над парой простых игр, и у нас есть некоторые проблемы с производительностью, с которыми мы постоянно сталкиваемся, и мне было любопытно, была ли это проблема кода или проблема «мы используем неправильные объекты».

Наши игры в основном простые и работают следующим образом:

У нас есть пользовательское представление, которое мы загружаем, и пользовательский объект, который является нашим игровым движком. В представлении есть таймер, который срабатывает так:

[NSTimer scheduledTimerWithTimeInterval:1.0 / 30.0 target:self selector:@selector(animationTimerMethod) userinfo:nil repeats:YES];

и в нашем методе таймера мы имеем следующее:

- (void)animationTimerMethod:(NSTimer*)timer 
{
  if([gameEngine doGameLoop])  //only redraw if we need to
    [self setNeedsDisplay];
}

Наш код рисования очень прост, мы просто рисуем пару изображений на экране, используя код, подобный следующему:

- (void)drawRect:(CGRect)rect
{
  CGGraphicsContext ctx = UIGraphicsGetCurrentContext();
  CGContextDrawImage(ctx, someRect, someImage);
}

Основная проблема, с которой мы сталкиваемся, - это реагирование на прикосновения. Наш код не получит ответ в методе touchesBegan много раз. Это просто ограничение библиотеки Core Graphics? Должны ли мы использовать OpenGL? Существуют ли другие способы создания простых анимаций (даже не движущихся по экрану объектов, всего 6 или около того кадров анимации для объекта в том же месте), которые были бы более отзывчивыми?

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 24 февраля 2009

Определенно есть способы ускорить это. Перерисовка изображений вручную в каждом кадре означает, что вы перерисовываете текстуры, которые вы можете использовать повторно. Вы можете использовать их повторно, перейдя в OpenGL или переместив изображения в CALayer, а затем просто переместив слой вместо перерисовки изображения.

Если вы не хотите переходить на OpenGL, вы, вероятно, также увидите значительный выигрыш в производительности, перейдя на CAAnimation вместо того, чтобы ваш код вычислял каждый кадр, но это может потребовать значительных изменений в вашем движке.

Кроме того, если вы можете избежать альфа-компоновки, это значительно увеличит скорость.

0 голосов
/ 24 февраля 2009

Мой первый вопрос: прозрачность ваших изображений?

Изображения с прозрачностью с высоким эффектом производительности. В документах Apple они упоминают об этом несколько раз.

Второе, что я хотел бы спросить, вы пытались запустить свое приложение в Инструментах и ​​/ или Акуле? Оба эти приложения могут помочь вам понять, где происходят ваши проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...