Cocos2d-x:幻体碰撞

cocos2d-x: phantom bodies collision

本文关键字:碰撞 Cocos2d-x      更新时间:2023-10-16

我正在开发一款使用cocos2d-x v3.2的游戏,其中我有块从屏幕顶部脱落。当它们到达地面时,它们就破裂了。通过schedule()调用generateBlock方法不断创建新的块。用下面的代码创建新的块:

  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()中,也没有出现在屏幕上),尽管生成的时间已经到了。并且不存在的幻影体与地面碰撞(我看到由于生成的粒子和"块击中地面"在日志中)。

终于查出问题所在了。我没有使用纹理缓存。我认为cocos2dx v3.2可以自动缓存精灵,他确实可以,但不知何故精灵只是没有缓存,所以他们只是消失了。当我在场景的init()方法中预加载它们后,它们不再消失。