无法返回自我Objective-c Cocos2d

时间:2013-01-28 22:00:27

标签: objective-c cocos2d-iphone return self

我只想警告你,我是法国人,对我未来的错误感到抱歉。 我正在编写一个蛇游戏(你知道,吃一个苹果,蛇变得更长),我真的被卡住了。我正在使用cocos2d,基本上,游戏完成除了那件事。我只是用自己的身体来实现蛇的碰撞管理。当它发生时,我的函数GameOver被称为:

-(void)gameOver{
for (NSUInteger i=0; i < [body count]; i++)
{
    [self removeChild:((SnakePart*)body[i]) cleanup:YES];
}

[self unscheduleUpdate];
[self removeChild:apple cleanup:YES];
[self removeChild:scoreLabel cleanup:YES];

CCTransitionRotoZoom *transition = [CCTransitionSlideInB transitionWithDuration:1.0 scene:   [EndGameLayer scene]];
[[CCDirector sharedDirector]replaceScene:transition];

}

我已经设置了一些断点来查看应用程序的错误位置,但它没有错误。事实上,它似乎在EndGameLayer的init中出错,之后立即调用。 init是:

-(id)init{

if( (self=[super initWithColor:ccc4(0, 0, 0, 255)]) ) {
    CGSize winSize = [[CCDirector sharedDirector] winSize];

    CCSprite * background = [CCSprite spriteWithFile:@"Game Over.jpg"];
    background.position = CGPointMake(winSize.width/2, winSize.height/2);


    CCMenuItemFont *boutonRecommencer = [CCMenuItemFont itemWithString:@"Restart" target:self selector:@selector(restart)];
    boutonRecommencer.fontSize = 28;
    boutonRecommencer.fontName = @"Helvetica";

    CCMenuItemFont *boutonMainMenu = [CCMenuItemFont itemWithString:@"Main Menu" target:self selector:@selector(mainMenu)];
    boutonMainMenu.fontSize = 28;
    boutonMainMenu.fontName = @"Helvetica";

    CCMenu *menuEcranFin = [CCMenu menuWithItems:boutonRecommencer, boutonMainMenu, nil];
    [menuEcranFin setPosition:ccp(winSize.width/2 ,winSize.height/2 - 65)];
    [menuEcranFin alignItemsInRows:[NSNumber numberWithInt:2], nil];
    [menuEcranFin alignItemsHorizontallyWithPadding:40];

    [self addChild:background];
    [self addChild:menuEcranFin];
}
return self;
}

然后再次,我在这段代码中放了一些断点,但是应用程序经历了所有这些而没有问题,似乎问题是当它返回自我但我真的不知道。此外,每次都不会显示此错误。有时我的gameOver屏幕显示,我可以重新启动游戏,然后尝试,错误回来。它几乎总是第一次或第二次gameOver出现。非常感谢你的帮助。

当我与自己发生冲突时出现错误,错误是:线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x800000008)。当我到达阵列界外时,我已经看到了类似的东西......但在这种情况下我真的不知道。当我启用Zombie对象时,错误是:线程1:EXC_Breakpoint(代码= EXC = l386_BPT,子代码= 0x0)。

1 个答案:

答案 0 :(得分:0)

好吧,即使我不明白,我也发现了问题。导致错误的行是:

[self removeChild:apple cleanup:YES];

即使在GameOver功能之后,即使游戏正在通过使用苹果的功能,游戏也会结束。这有点奇怪,但无论如何,现在它有效!