Xcode 精灵有时不可见

Xcode 精灵有时不可见,xcode,cocos2d-iphone,Xcode,Cocos2d Iphone,我有一个基于cocos2d的iphone应用程序有问题。当用户暂停游戏,然后点击恢复按钮时,一些CCSprite将从屏幕上消失。 这种行为是随机的,没有遵循任何模式。我只知道只有当用户恢复游戏时才会发生这种情况 这是代码,我做错了什么? 我最初认为这可能是内存管理问题,但当用户点击resume时,我从未获得任何EXC\u BAD\u访问权限。。。所以精灵可能仍然存在 精灵是我称之为“myobject”的对象中的一个属性 在myObject.h中,我有: @interface myObject :

我有一个基于cocos2d的iphone应用程序有问题。当用户暂停游戏,然后点击恢复按钮时,一些CCSprite将从屏幕上消失。 这种行为是随机的,没有遵循任何模式。我只知道只有当用户恢复游戏时才会发生这种情况

这是代码,我做错了什么? 我最初认为这可能是内存管理问题,但当用户点击resume时,我从未获得任何EXC\u BAD\u访问权限。。。所以精灵可能仍然存在

精灵是我称之为“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

==编辑结束==

您的设置有些奇怪。FallingObject是包含两个精灵的CCNode。但是,您不是将精灵添加到FallingObject类(self)中,然后将FallingObject添加到场景中,而是将精灵直接添加到场景中。这会将FallingObject节点留在场景层次之外

这也是为什么您必须手动更新精灵位置,否则根本不需要代码:

self.sprite1.position=ccp(self.x,self.y);
值得一提的是,我认为由于此设置的不一致性,您可能会意外地将精灵移动到屏幕外,或者节点没有正确暂停或恢复。

在Cocos2D中应该有一个pause()方法,您可以调用它来停止虚拟时间的流逝。你已经在打电话了吗?干杯