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