CCSpriteFrameCache или CCSprite? - Cocos2d - PullRequest
0 голосов
/ 03 мая 2011

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

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

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

Пример кода:

-(void)buttons:(CGPoint)touchLocation {
if (CGRectContainsPoint(leftB.boundingBox, touchLocation) && tapP == YES && 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) && tapP == YES && 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 Ответ

0 голосов
/ 03 мая 2011

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

http://www.cocos2d -iphone.org / вики / doku.php / prog_guide: best_practices

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

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