У меня есть приложение для iphone, основанное на cocos2d, с проблемой.Когда пользователь приостанавливает игру, а затем нажимает кнопку возобновления, некоторые CCSprites исчезают с экрана.Такое поведение является случайным, шаблон не соблюдается.Я просто знаю, что это происходит только тогда, когда пользователь возобновляет игру.
Вот код, что я делаю не так?Сначала я подумал, что это может быть проблема управления памятью, но я никогда не получаю EXC_BAD_ACCESS, когда пользователь нажимает возобновить ... Таким образом, спрайты, вероятно, все еще существуют.
Спрайты - это свойство внутри объекта, который я вызову"myobject".
В myObject.h у меня есть:
@interface myObject : CCNode{
CCSprite *_sprite1,*_sprite2;
// some other code
}
@property (nonatomic,retain) CCSprite *sprite1,*sprite2;
А в файле myObject.m:
@synthesize sprite1=_sprite1;
@synthesize sprite2=_sprite2;
+(id)create:(CCLayer*)scene{
myobject.sprite1 = [CCSprite spriteWithFile:spriteFile];
[scene addChild:myobject.sprite1];
// same for sprite2
}
-(void) move:(ccTime)dt{
//SOMECODE
self.sprite1.position=ccp(self.x,self.y); // same for sprite2
}
затем они перемещаются с помощью функциивызван myobject.
На главной сцене вот как эти объекты создаются и перемещаются:
myObject *myObject;
NSMutableArray *_myObjects;
@implementation HelloWorld
+(id) scene
{
CCScene *scene = [CCScene node];
HelloWorld *layer = [HelloWorld node];
[scene addChild:layer z:0 tag:33];
return scene;
}
-(id) init
{
if( (self=[super init] )) {
_myObjects = [[NSMutableArray alloc] init];
// some other code
}
}
-(void) addObject(){
myObject=[myObject create:self];
[_fallingObjects addObject:fallingObject];
}
-(void) nextFrame:(ccTime) dt{
for(myObject *theObject in _myObjects){
[theObject move:dt];
}
}
// And here is the function that does the pause/unpause, here it is:
- (void) pauseGame{
if(pauseStatus==0){
[[CCDirector sharedDirector] pause];
pauseStatus=1;
// some code to display menu etc... such as:
[self addChild:pauseMenu z:10];
}
else{
[self removeChild:pauseMenu cleanup:YES];
[self removeChild:scoreLabel cleanup:YES];
[self removeChild:highscoreLabel cleanup:YES];
[self removeChild:titleLabel cleanup:YES];
[self removeChild:pauseLayer cleanup:YES];
[[CCDirector sharedDirector] resume];
pauseStatus=0;
}
}
== РЕДАКТИРОВАТЬ ===
У меня естьобнаружил, что эта проблема также относится к спрайтам, которые я добавляю прямо в мою сцену, например клоуну спрайтов, добавленному, как показано ниже:
CCSprite *clown;
@implementation HelloWorld
-(id) init
{
if( (self=[super init] )) {
// some code
clown = [[CCSprite spriteWithFile:@"clown.png"] retain];
[self addChild:clown z:2];
// some more code
}
}
@end
== END OF EDIT ===