Я новичок в cocos2d и столкнулся с проблемой памяти.
У меня предупреждение об уровне памяти 1 и 2.
У меня есть две сцены в моей игре.
В первой сцене (основное меню) у меня есть кнопка (при нажатии она заменяет сцену на 2-ю, т.е. (StartMoving))
В StartMoving.h файл У меня есть инициализированные спрайты, массивы (которые я освобождаю в методе dealloc)
В моем методе инициализации StartMoving у меня есть инициализированное фоновое изображение.к методу Allreset.
Это мой код метода Allreset.
- (void) AllReset
{
while (x == 5)
{
x = 0;
[[CCDirector sharedDirector]replaceScene: [сцена основного меню]];// Замена сцены, когда X = 5
}
CCLOG(@"%@: %@",NSStringFromSelector(_cmd),self);
CCSprite *tra=[CCSprite spriteWithFile:@"tra.png"];
tra.position =ccp(800,115);
[self addChild:tra z:0 tag:2];
[tra1 insertObject:tra atIndex:0]; //tra1 is NSMutablearray which is realeased in dealloc
NSLog(@"tra is loaded....");
//[[SimpleAudioEngine sharedEngine] playEffect:@"police.wav"];
NSArray *name14 =[NSArray arrayWithObjects:@"app1.plist",@"app2.plist",@"app3.plist",@"app4.plist",@"app5.plist", nil];
NSArray *name24 =[NSArray arrayWithObjects:@"app1.png",@"app2.png",@"app3.png", @"app4.png",@"app5.png",nil];
NSArray *name34 =[NSArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e",nil];
NSString *file14=[name14 objectAtIndex:x];
NSString *file24=[name24 objectAtIndex:x];
NSString *file34=[name34 objectAtIndex:x];
int frame[]={3, 7, 11, 4, 5};
float Fdelay[]={0.15, 0.2, 0.3, 0.1,0.5};
CCSpriteFrameCache *frameCache4 =[CCSpriteFrameCache sharedSpriteFrameCache];
[frameCache4 addSpriteFramesWithFile:file14];
CCSpriteBatchNode *danceSheet4 = [CCSpriteBatchNode batchNodeWithFile:file24];
[self addChild:danceSheet4];
CCSprite *sprite4 = [CCSprite node];
sprite4.position = ccp(395,155);
[tra addChild:sprite4 z:1 tag:14];
NSMutableArray *animFrames4 = [NSMutableArray arrayWithCapacity:frame[x]];
for(int i = 1; i <= frame[x]; i++) {
NSString *namef4=[NSString stringWithFormat:@"%@%i.png",file34,i];
CCSpriteFrame *frame4 = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:namef4];
[animFrames4 addObject:frame4];
}
CCAnimation *anim4 = [CCAnimation animationWithFrames:animFrames4 delay:Fdelay[x]];
CCAnimate *animN4 = [CCAnimate actionWithAnimation:anim4];
CCRepeatForever *repeat4 = [CCRepeatForever actionWithAction:animN4];
[sprite4 runAction:repeat4];
id move= [CCMoveTo actionWithDuration:5.5f position:CGPointMake(240,115)];
id easeout=[CCEaseOut actionWithAction:move rate:1.5f];
id menudisp=[CCCallFuncN actionWithTarget:self selector:@selector(menudisplay:)];
[train1 runAction:[CCSequence actions:easeout,menudisp, nil]];
}
Я показал только одну анимацию здесь, но всего 7 анимаций на одном и том же спрайте.
Когда тра останавливается в заданной точке, отображается метка меню.и когда пользователь нажимает на ярлык, он начинает двигаться в том же направлении и исчезает с экрана.Как только весь спрайт выходит из экрана, вызывается один метод, который очищает память о tra (я думаю, с этим будут очищены только дети tra. Исправьте меня, если я ошибаюсь ..)
После очистки памяти он снова вызовет метод Allreset с увеличенным значением x.
`- (void) Incrementingx
{x ++;
[selfAllreset];
}
`
Я также использовал следующие методы в applicationDidReceiveMemoryWarning метода appdelegate.m
[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames]; * 1059[[CCTextureCache sharedTextureCache] removeUnusedTextures];
// [[CCDirector sharedDirector] purgeCachedData];// обратите внимание, что это прокомментировано
Приложение отлично работает на симуляторе, но на устройстве: (
, пожалуйста, помогите мне :(