не работает - Box2D - PullRequest
       5

не работает - Box2D

0 голосов
/ 09 мая 2011

Я использую tilemap в моей игре box2D, в которой я создал силы.Когда игрок нажимает на власть, на экране отображается метка счета.Наряду с этим я хочу удалить эту силу из карты тайлов, когда игрок ударит по ней.Я отобразил ярлык, но не могу удалить питание.Вот некоторый код:

В ContactListener я вызываю метод, который удаляет энергию из карты тайлов:

void ContactListener::BeginContact(b2Contact *contact) {  
else if(actorA.tag==obj.gamePower.tag)     //obj is a DataClass object.
    {  
        [GameScene addPointLabel];    // For displaying score label  
        [GameScene removePower:actorA];     
    }  



+(void)removePower:(id)sender         
{  
    GameScene *obj=[[GameScene alloc]init];  
    CCSprite *sprite = (CCSprite *)sender;  
    [obj removePowerFromScene:sprite];  
    [obj release];      
}  


-(void)removePowerFromScene:(id)sender    
{  
    CCSprite *sprite = (CCSprite *)sender;  
    [self removeChild:sprite cleanup:YES];    
}  

Я создал объектный слой на карте тайлов для отображения мощности.Но почему-то я не могу это удалить.Кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 09 мая 2011
  • Если power - это CCNode, почему бы вам не удалить его с помощью [power removeFromParentAndCleanup: YES]?
  • (removePower :) ничего не удаляет, поскольку создает новую сцену и удаляет спрайтиз той сцены, где спрайт не принадлежит.
  • Еще одно замечание, будьте осторожны с контактным слушателем.Удаление узла в BeginContact может привести к сбою.Давайте представим случай, когда powerA контактирует как с actor1, так и с actor2.Первый вызов BeginContact с powerA и actor1 удаляет powerA, поэтому последующий вызов BeginContact с включенным powerA завершится сбоем!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...