在不同类型的节点上更新

时间:2013-09-24 06:34:56

标签: box2d cocos2d-x

我正在尝试绘制体节点类型以及polygonesprite。当我要更新两种类型的更新方法。我遇到了问题。

这是多边形类型:

BombBallSprite *bomb = BombBallSprite::spriteWithWorld(world);
bomb->getBody()->SetType(b2_staticBody);
bomb->activateCollisions();

this->addChild(bomb);

这是体节点类型:

 this->addBodyNode(node, 0);
 node->release();

以上两种类型都是在单个场景中绘制的。

当我对两者都进行更新时,我遇到了问题:

 void HelloWorld::update(float dt)
 {
     if( gameState_ != kGameStatePaused )
     {
        world_->Step(dt, velocityIterations, positionIterations);
     }

     this->checkAndSliceObjects();

}


void HelloWorld::checkAndSliceObjects()
{
double curTime = getTimeTick();

for (b2Body* b = world_->GetBodyList(); b; b = b->GetNext())
{
    if (b->GetUserData() != NULL)
    {

        PolygonSprite *sprite = (PolygonSprite*)b->GetUserData();
        BodyNode *node = (BodyNode*) b->GetUserData();
        if( node && (node->properties_ & BN_PROPERTY_SPRITE_UPDATED_BY_PHYSICS) ) {

          -------

        }

        if (sprite->getSliceEntered() && curTime > sprite->getSliceEntryTime())
        {
            sprite->setSliceEntered(false);
        }
        else if (sprite->getSliceEntered() && sprite->getSliceExited())
        {
            this->splitPolygonSprite(sprite); 
        }                      
    }

}

}

我无法理解如何处理更新方法的以下内容

    PolygonSprite *sprite = (PolygonSprite*)b->GetUserData();
    BodyNode *node = (BodyNode*) b->GetUserData();

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

我有一个捷径方法。

您必须为所有人设置标记。例如。 polygone sprite为100,sprite为200。

可以使用用户数据检查标签。如果标记为100,您将执行polygone精灵更新。如果标签是200,你将进行精灵更新。

我认为它会对你有所帮助。