2013-03-12 62 views
0

我有1个包含两层的场景。一个名为BackgroundLayer,另一个名为GameplayLayer。背景层看起来像这样:Cocos2D崩溃 - (id)init

-(id) init{ 
self = [super init]; 
if(self != nil){ 
    CCSprite * backgroundImage; 
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){ 
     backgroundImage = [CCSprite spriteWithFile:@"backgroundr.png"]; 

    } 
    else{ 
     backgroundImage = [CCSprite spriteWithFile:@"background.png"]; 
    } 

    CGSize screenSize = [[CCDirector sharedDirector] winSize]; 
    [backgroundImage setPosition:CGPointMake(screenSize.width/2, screenSize.height/2)]; 
    [self addChild:backgroundImage]; 

} 
return self;} 


工作正常。但事情是,GameplayLayer会导致游戏崩溃。 GameplayLayer看起来是这样的:

-(id) init{ 
    self = [self init]; 
    if(self != nil){ 

     } 

    return self; 
} 

而且游戏场景是这样的:

-(id) init{ 
self = [super init]; 
if(self != nil){ 
    BackgroundLayer * backgroundLayer = [BackgroundLayer node]; 
    [self addChild:backgroundLayer z:0]; 

    GameplayLayer * gameplayLayer = [GameplayLayer node]; 
    [self addChild:gameplayLayer z:5]; 

} 
return self; 

}


我真的不看到这里的问题。但是如果我删除 - (id)init它不会崩溃。
有什么想法?
这里是日志的最后几行:

2013-03-12 00:41:41.371 CocoTest[3574:c07] cocos2d: **** WARNING **** CC_ENABLE_GL_STATE_CACHE is disabled. To improve performance, enable it by editing ccConfig.h 

2013-03-12 00:41:41.371 CocoTest[3574:c07] cocos2d: cocos2d v2.0.0 
2013-03-12 00:41:41.371 CocoTest[3574:c07] cocos2d: Using Director Type:CCDirectorDisplayLink 

回答

3

self = [self init];GameplayLayer将永远递归。应该是self = [super init];

+0

天啊!谢谢!这样一个愚蠢的错误。再次感谢:) – 2013-03-12 00:56:02

+1

有些情况下你需要使用'[self init]',但它们很少。我希望Xcode给出更多有关递归函数的警告。 – 2013-03-12 00:58:50

+0

同意。希望这就是我们在Xcode 5中看到的东西哈哈。 – 2013-03-12 01:00:19