CCSprite замедляет производительность - PullRequest
3 голосов
/ 04 марта 2012

Я делаю приложение для iPhone, используя cocos2d для графики, и я добавил в свой проект 4 картинки, которые я хотел наложить для использования в качестве фона. Затем я добавил их в приложение, сделав их CCSprites вот так ...

    background.sun = [CCSprite spriteWithFile:@"SunLayer.png"];
    [self addChild:background.sun z:-1];

    background.mountain = [CCSprite spriteWithFile:@"MountainLayer.png"];
    [self addChild:background.mountain z:-1];

    background.tree = [CCSprite spriteWithFile:@"TreeLayer.png"];
    [self addChild:background.tree z:-1];

    background.hill = [CCSprite spriteWithFile:@"HillLayer.png"];
    [self addChild:background.hill z:-1];


    background.hill.position = ccp(s.width/2, s.height/2);
    background.sun.position = ccp(s.width/2, s.height/2);
    background.mountain.position = ccp(s.width/2, s.height/2);
    background.tree.position = ccp(s.width/2, s.height/2);

Это уменьшило частоту кадров до 30! с 60 !! Как я могу поддерживать хорошую частоту кадров, но добавить эти спрайты! большое спасибо

Ответы [ 5 ]

2 голосов
/ 04 марта 2012

Поскольку вы все добавляете их в один и тот же z, почему бы не сделать это в фотошопе или аналогичном и добавить одну текстуру? Вам нужно покрасить или обработать какую-либо из этих текстур отдельно?

Кроме того, я часто нахожу, что FPS на симуляторе не имеет никакого сходства с тем, что я получу на самом устройстве (ах). Если вы подозреваете проблему с производительностью, я бы посоветовал вам быстро провести быстрое тестирование на устройстве, чтобы оценить, является ли проблема реальной или нет.

2 голосов
/ 04 марта 2012

Это происходит из-за большого размера изображения.

У меня была точно такая же проблема.У меня было 4 изображения 960x640.В то время как 3 из них в основном прозрачные, я просто изменил размер холста до 960x640, чтобы легко расположить их в центре.35 кадров в секунду вместо 60.

Я обрезал 3 изображения до границ содержания и сделал их размером около 960x50.И это работает как шарм, снова 60fps.

1 голос
/ 05 марта 2012

С большими изображениями вы значительно улучшите частоту кадров, если добавите их в CCSpriteBatchNode, а не по отдельности, как вы.Таким образом, ЦП будет делать только один вызов движку рисования, а не отдельные вызовы для каждого изображения.В ходе тестирования было показано, что CCSpriteBatchNode имеет большинство преимуществ применительно к большим изображениям, таким как фоновые изображения.

0 голосов
/ 05 марта 2012

Это связано с двумя факторами:

a) Прозрачность очень дорогая с графическим процессором PowerVR

b) Большие изображения еще больше

0 голосов
/ 04 марта 2012

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

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