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