2013-09-01 6 views
3

В моем коде ниже, который я вызываю в методе обновления, CCPhyscisSprites удаляются, и их тела уничтожаются, когда элементы массива находятся вне экрана. Я поставил CCLOG, чтобы проверить количество массивов, и я всегда получаю 1, когда все спрайты выключены. Хотя я не вижу спрайта, это, скорее всего, все еще вокруг. Что может быть причиной и как я могу ее решить?уничтожает массив CCPhysicsSprites

-(void)ballScheduler { 

if (ballArray != NULL) { 
    for (int i = 0; i < ballArray.count; i++) { 
     CCLOG(@"ball array count is %d", ballArray.count); 
     CCPhysicsSprite* ballPhysicsSprite = [ballArray objectAtIndex:i]; 
     b2Vec2 ballForce = b2Vec2(forceX, forceY); 
     ballPhysicsSprite.b2Body->ApplyForce(ballForce, ballPhysicsSprite.b2Body->GetWorldCenter()); 

      if (ballPhysicsSprite.position.x < -ballPhysicsSprite.contentSize.width/2) { 
       ballWorld->DestroyBody(ballPhysicsSprite.b2Body); 
       ballPhysicsSprite.b2Body = NULL; 
       [ballArray removeObject:ballPhysicsSprite]; 
       [ballBatchNode removeChild:ballPhysicsSprite]; 
     } 
     } 
    } 
} 
+0

Я видел, что вы хотите решить также этот http://stackoverflow.com/questions/38525232/replacing-calayer-and-cabasicanimation-with-skscene-and-skactions, я обновляю свой ответ, пожалуйста, возьмите (я пишу вам здесь, потому что вы не в комментариях или разговорах) –

ответ

0

Не удаляйте объекты из массива во время итерации по нему.

+0

ok. Теперь я заполняю другой массив с шарами экрана, которые нужно уничтожить. Это делается в блоке if. '[destroyBallArray addObject: ballPhysicsSprite];'. Я нахожу это немного сложным, убедившись, что каждый шарик с экрана добавляется в массив только один раз, поскольку он вызывается в методе обновления. – NSologistic

+0

просто используйте reverseEnumerator, тогда вы можете безопасно удалить текущий перечислимый объект – LearnCocos2D

Смежные вопросы