CCSpriteFrameCache или CCSprite? — Cocos2d

#iphone #cocos2d-iphone

#iPhone #cocos2d-iphone

Вопрос:

Я создаю свою первую игру, и пока моя единственная проблема заключается в использовании памяти (я не заплатил разработчику, поэтому запускаю ее в симуляторе). Пока что он занимает около 23 МБ, судя по тому, что я прочитал, это слишком много. Это правда? Во-первых, в моем главном меню моя самая большая проблема — это мой фон, он занимает более 2 МБ памяти. Это нормально? Во-вторых, фон в моей игровой сцене также занимает более 2 МБ. Это нормально? В-третьих, у меня есть 2 CCSpriteFrameCaches, в одном из которых 55 файлов в формате PNG, а в другом — 12. Файл с 55 изображениями занимает около 9 МБ памяти. Это звучит нормально? Второй файл занимает около 3 МБ. Это звучит нормально?

55 изображений не добавляются в слой до тех пор, пока не будет нажата кнопка (которая затем занимает еще больше памяти, около 7 МБ, не уверен, почему). Затем при нажатии второй кнопки первое изображение удаляется, а второе изображение добавляется. Затем, когда первая кнопка нажата снова, второе изображение удаляется и добавляется третье изображение (и так далее, и так далее, четвертое). Мой вопрос в том, было бы лучше использовать CCSpriteFrameCache или CCSprite? Или есть какая-то альтернатива.

Если у кого-нибудь есть лучший способ сделать это, пожалуйста, дайте мне знать. ЛЮБАЯ помощь приветствуется!

Пример кода:

 -(void)buttons:(CGPoint)touchLocation {
if (CGRectContainsPoint(leftB.boundingBox, touchLocation) amp;amp; tapP == YES amp;amp; paused == NO) {
    if (count == 1)
    {
        isBOP = YES;
        count = 2;
    } else if (count == 3)
    {
        [bspriteSheet removeChild:_b cleanup:YES];
        [pspriteSheet removeChild:_p cleanup:YES];

        _p = [CCSprite spriteWithSpriteFrameName:@"p3.png"];
        [pspriteSheet addChild:_p];
        count = 4;
        _p.position = ccp(240, 215);

        _b = [CCSprite spriteWithSpriteFrameName:@"b2.png"];
        _b.position = ccp(240, 158);
        [bspriteSheet addChild:_b];
    }
if (CGRectContainsPoint(rightB.boundingBox, touchLocation) amp;amp; tapP == YES amp;amp; paused == NO) {
    if (count == 2)
    {
        [self removeChild:gb cleanup:YES];
        [pspriteSheet removeChild:_p cleanup:YES];

        _p = [CCSprite spriteWithSpriteFrameName:@"p2.png"];
        _p.position = ccp(240, 215);
        [pspriteSheet addChild:_p];

        _b = [CCSprite spriteWithSpriteFrameName:@"b1.png"];
        _b.position = ccp(240, 158);
        [bspriteSheet addChild:_b];

        count = 3;
    } else if (count == 4)
    {
        [bspriteSheet removeChild:_b cleanup:YES];
        [pspriteSheet removeChild:_p cleanup:YES];

        _p = [CCSprite spriteWithSpriteFrameName:@"p4.png"];
        [pspriteSheet addChild:_p];
        count = 5;
        _p.position = ccp(240, 215);

        _b = [CCSprite spriteWithSpriteFrameName:@"b3.png"];
        _b.position = ccp(240, 158);
        [bspriteSheet addChild:_b];
    }
  

Комментарии:

1. Просто совет, используйте формат изображения pvr для спрайтов, которым не обязательно быть четкими или с высоким разрешением, потому что они занимают намного меньше памяти. Удачи в вашей первой игре! 🙂

Ответ №1:

Ознакомьтесь с документом о лучших практиках… у них есть много подробностей о проблеме, с которой вы столкнулись.

http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:best_practices

Рассмотрите возможность использования других форматов изображений для ваших больших изображений. Использование файла PVRTC значительно сократило бы использование вашей памяти.