それで、これがそれがどうなるかです。
私は現在、多くの障害物で構成される Cocos2d ゲームに取り組んでいます。こんな感じで10秒間隔で画面に障害物が1つ追加されていきます。
ObstacleSprite* newObstacle = [ObstacleSprite spriteWithFile:@"Obstacle.png" rect:CGRectMake(0, 0, 20, 20)];
newObstacle.position = ccp(mainPlayer1.position.x,10);
[self addChild:newObstacle];
[self.arrayForObstacles addObject:newObstacle];
arrayForObstacles
Obstacles と MainPlayer が衝突しないかどうかもチェックし続けたいので、これらの障害物を に挿入します。
この機能を使ってチェックしています。
- (void) checkCollisionWithObstacle
{
if(mainPlayer1.playerActive)
{
for(int i = 0; i < [self.arrayForObstacles count]; i++)
{
ObstacleSprite* newObstacle = [self.arrayForObstacles objectAtIndex:i];
if(newObstacle != nil)
{
if(CGRectIntersectsRect([mainPlayer1 boundingBox], [newObstacle boundingBox]))
{
mainPlayer1.livesLeft--;
}
}
}
}
}
問題
問題は、特定のスコアに到達すると、障害物の 1 つが削除されることです。障害物の除去は、先入れ先出し (FIFO) モードと同じように機能します。したがって、障害物を削除するには、次のメソッドを記述します。
- (void) keepUpdatingScore
{
//update new score
mainPlayer1.score+=10;
//remove obstacle when score increases by 5k
if(mainPlayer1.score > 5000 && mainPlayer1.score > 0)
{
mainPlayer1.playerActive = NO;
if([self.arrayForObstacles count] > 0)
{
CCLOG(@"count is %d",[self.arrayForObstacles count]);
ObstacleSprite* newObstacle = [self.arrayForObstacles objectAtIndex:0];
[self.arrayForObstacles removeObjectAtIndex:0];
[self removeChild:newObstacle cleanup:YES];
CCLOG(@"count is %d",[self.arrayForObstacles count]);
}
mainPlayer1.playerActive = YES;
}
else
{
}
スコアが 5000 を超えるとクラッシュします。
アップデート
method に再度移動するとクラッシュが発生しcheckCollisionWithObstacle
ます。
これがスレッドルックです。
これがクラッシュする行です。