#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 значительно сократило бы использование вашей памяти.