0

私はフランス人であることを警告したいだけなので、私の将来の間違いについて申し訳ありません. 私はスネーク ゲームをプログラミングしています (ご存知のとおり、リンゴを食べるとスネークが長くなります)。私はcocos2dで作業しており、基本的に、ゲームは1つのことを除いて終了です。ヘビの衝突管理を実装するだけで、それは自分の体です。そのとき、私の関数 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;
}

繰り返しますが、このコード内にいくつかのブレークポイントを配置しましたが、アプリは問題なくすべてを通過します。問題は self を返すときにあるようですが、私にはわかりません。また、このバグは毎回表示されるわけではありません。ときどきゲームオーバー画面が表示され、ゲームを再起動できますが、試行後にバグが再発します。ほとんどの場合、gameOver が表示されるのは 1 回目か 2 回目です。どうもありがとうございました。

新しい 自分自身との衝突があり、エラーが次の場合にバグが表示されます。スレッド 1: EXC_BAD_ACCESS (コード = 1、アドレス = 0x800000008)。範囲外の配列に到達したときに、すでにそのようなことを見てきました...しかし、この場合、私は本当に知りません。ゾンビ オブジェクトを有効にすると、次のエラーが表示されます: スレッド 1: EXC_Breakpoint (コード=EXC=l386_BPT、サブコード = 0x0)。

4

1 に答える 1

0

わかりませんでしたが、問題を見つけました。エラーの原因となった行は次のとおりです。

[self removeChild:apple cleanup:YES];

GameOver 関数の後、ゲームが終了した場合でも、ゲームがリンゴを使用する関数を通過していたようです。それはちょっと奇妙ですが、とにかく、今はうまくいきます!

于 2013-01-30T19:16:38.237 に答える