Как нарисовать фон быстро в cocos2d?

Я играю с маленькой игрой на своем iPad, используя cocos2d, и я столкнулся с некоторыми проблемами производительности. У меня есть изображение 512x512, выложенное как мой фон. Это дает мне около 40 кадров в секунду с 20 спрайтами (в CCSpriteBatchNode), код для фона следующий:

CCSprite *background;
background = [CCSprite spriteWithFile:@"oak.png" rect : CGRectMake(0,
                                                                   0,
                                                                   size.width,
                                                                   size.height)];
background.position =  ccp( size.width /2 , size.height/2 );

ccTexParams params = {GL_LINEAR,GL_LINEAR,GL_REPEAT,GL_REPEAT};
[background.texture setTexParameters: &params];

Если я удалю фон, я получу твердую 60 кадров в секунду.

Я попытался преобразовать изображение в PVRTC, и это дало дополнительные fps или два. Я получаю одинаковые фреймы с использованием изображения 1024x768 вместо черепичной версии.

Так как мой фон останется ориентированным по оси, немасштабированным и обычно статическим. Я полагаю, что должен быть более быстрый способ сделать это, чем иметь его как обычный CCSprite?

alt text

Ответ 1

Оказывает движение cocos2d таинственными способами. Добавление фона в обертку в противном случае CCSprite возвращает частоту кадров до 60:

CCSprite *spback = [(CCSprite*)[CCSprite alloc] init];
[self addChild:spback];

CCSprite *sp = [CCSprite spriteWithFile:@"Background.png"];
sp.position = ccp(1024/2, 768/2);
[spback addChild:sp];

Кредиты для этого идут на yaoligang на форумах cocos2d.

Ответ 2

Прежде всего, выполняете ли вы это на своем iPad или симуляторе? Обычно существует большая разница в производительности. Посмотрев на форумы, где люди сталкиваются с подобными проблемами, я бы попытался разделить весь образ 1024x768 на 2 изображения размером 512x768. Надеюсь, что это поможет.

Ответ 3

Я пробовал это сам с фоном 1024x768 и получаю около 60 кадров в секунду даже при отладке iPad. Возможно, убедитесь, что у вашего изображения нет дополнительных каналов или альфа?