2014-08-10 2 views
0

Я разрабатываю игру с 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(), где я отслеживаю генерации блоков или на экране), хотя время генерации пришло. И это несуществующее фантомное тело сталкивается с землей (что я вижу из-за сгенерированных частиц и «блочного удара» в журнале).

+0

Я не уверен, не могли бы вы добавить больше заявлений CCLog для дальнейшего сужения того, что происходит? – GameDeveloper

+0

Я как-то нашел проблему, хотя для меня это немного имеет смысл. В конструкторе Blocks я выбираю случайный тип блока из enum, затем parseJsonFile с телами blokcs. После этого довольно большая конструкция распределительного шкафа выбирает спрайт и тело необходимого блока. – mrpsihopath

+0

Итак, я заменил запланированный блок Generation поколением на ощупь и начал экспериментировать с количеством типов блоков, и оказалось, что если их меньше 5 блоков - они никогда не исчезают, более 5 - иногда исключается блок-спрайт блока. Не знаю, почему. – mrpsihopath

ответ

0

И, наконец, выясните, в чем была проблема. Я не использовал текстурный кеш. Я думал, что cocos2dx v3.2 может справиться с autocahe, и он на самом деле может, но как-то спрайты просто не кэшировали, поэтому они просто исчезли. После того как я предварительно загрузил их в методе init() сцены, они больше не исчезают.