Как нарисовать фон быстро в 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: ¶ms];
Если я удалю фон, я получу твердую 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. Возможно, убедитесь, что у вашего изображения нет дополнительных каналов или альфа?