Я разрабатываю игру с cocos2d-x v3.2, где у меня есть блоки, падающие с верхней части экрана. Когда они достигают земли - они ломаются. Новые блоки создаются постоянно с помощью метода schedule(), вызывающего метод generateBlock. Новый блок создан с помощью этого кода:cocos2d-x: phantom body collision
newBlock = new Blocks(newPoint, false);
newBlock->drawBlock(this, BLOCK_ZORDER);
и удаляется с этим кодом:
if(BLOCKS_BITMASK == contact.getShapeA()->getBody()->getCollisionBitmask())
{
contact.getShapeA()->getBody()->removeFromWorld();
layer->removeChild(contact.getShapeA()->getBody()->getNode());
}
else
{
contact.getShapeB()->getBody()->removeFromWorld();
layer->removeChild(contact.getShapeB()->getBody()->getNode());
}
Все работает отлично, за исключением того, что иногда блок не генерирует (это ни появляются в CCLog(), где я отслеживаю генерации блоков или на экране), хотя время генерации пришло. И это несуществующее фантомное тело сталкивается с землей (что я вижу из-за сгенерированных частиц и «блочного удара» в журнале).
Я не уверен, не могли бы вы добавить больше заявлений CCLog для дальнейшего сужения того, что происходит? – GameDeveloper
Я как-то нашел проблему, хотя для меня это немного имеет смысл. В конструкторе Blocks я выбираю случайный тип блока из enum, затем parseJsonFile с телами blokcs. После этого довольно большая конструкция распределительного шкафа выбирает спрайт и тело необходимого блока. – mrpsihopath
Итак, я заменил запланированный блок Generation поколением на ощупь и начал экспериментировать с количеством типов блоков, и оказалось, что если их меньше 5 блоков - они никогда не исчезают, более 5 - иногда исключается блок-спрайт блока. Не знаю, почему. – mrpsihopath