访问box2d userdata

时间:2012-04-24 12:12:31

标签: cocos2d-iphone physics box2d-iphone user-data

我知道这听起来很简单。我通过更新方法在一种方法中访问b2Body的用户数据时遇到问题。我需要访问update方法中的userdata属性来设置多个重力。我只是没有得到它。以下是更新方法

-(void) update: (ccTime) dt
{
int32 velocityIterations = 8;
int32 positionIterations = 1;
world->Step(dt, velocityIterations, positionIterations);    

for (b2Body* b = world->GetBodyList(); b; b = b->GetNext())
{
    if (b->GetUserData() != NULL) {
        if (b == spriteData) {
            b->ApplyForce( b2Vec2(0.0,9.8*b->GetMass()),b->GetWorldCenter()); // here 0.0 is x, 9.8 is y (the gravity)
        }
    }
}

}

如何访问另一种方法中的userdata属性(spriteData)。请帮忙

1 个答案:

答案 0 :(得分:0)

我建议您声明一个数据结构MyUserData(使用您认为合适的名称)。它将包含两件事:

  1. 指向实际用户数据对象的指针
  2. 身份证号码
  3. 使用此结构存储您身体的用户数据,并使用该ID识别特定的用户数据:

     if (b->GetUserData() != NULL) {
            MyUserData *myUserData = (MyUserData *)b->GetUserData();
            if (myUserData->id == <id for sprites which require other gravity force>) {
                b->ApplyForce( b2Vec2(0.0,9.8*b->GetMass()),b->GetWorldCenter()); // here 0.0 is x, 9.8 is y (the gravity)
            }
        }