0

我只是想警告你,我是法国人,为我未来的错误感到抱歉。我正在编写一个蛇游戏(你知道,吃一个苹果,蛇就会变长),我真的被困住了。我正在使用 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 中存在错误,该方法随后立即被调用。初始化是:

-(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)时会出现错误。当我到达一个超出范围的数组时,我已经看到过类似的事情......但在这种情况下,我真的不知道。当我启用僵尸对象时,错误是:线程 1:EXC_Breakpoint (code=EXC=l386_BPT, subcode = 0x0)。

4

1 回答 1

0

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

[self removeChild:apple cleanup:YES];

似乎即使游戏通过了使用苹果的功能,即使在 GameOver 功能之后,游戏也结束了。这有点奇怪,但无论如何,现在它可以工作了!

于 2013-01-30T19:16:38.237 回答