我只想警告你,我是法国人,对我未来的错误感到抱歉。 我正在编写一个蛇游戏(你知道,吃一个苹果,蛇变得更长),我真的被卡住了。我正在使用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)。
答案 0 :(得分:0)
好吧,即使我不明白,我也发现了问题。导致错误的行是:
[self removeChild:apple cleanup:YES];
即使在GameOver功能之后,即使游戏正在通过使用苹果的功能,游戏也会结束。这有点奇怪,但无论如何,现在它有效!