【问题标题】:Why does this C++ (cocos2d, box2d) example give a pointer instead of a value?为什么这个 C++ (cocos2d, box2d) 示例给出的是指针而不是值?
【发布时间】:2012-02-22 20:45:38
【问题描述】:

我创建了这个结构:

struct MyBodyData
{
    int someNumber;
};

然后创建了一个新的body:

b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
bodyDef.position.Set(0.0f, -10.0f);
b2Body* body1 = world->CreateBody(&bodyDef);
MyBodyData *bodyData = new MyBodyData();
bodyData->someNumber = 4;
body1->SetUserData(&bodyData);

b2PolygonShape dynamicBox;
dynamicBox.SetAsBox(.5f, .5f);//These are mid points for our 1m box
b2FixtureDef fixtureDef;
fixtureDef.shape = &dynamicBox; 
fixtureDef.density = 1.0f;
fixtureDef.friction = 0.3f;
body1->CreateFixture(&fixtureDef);

然后尝试在此处访问 someNumber:

for (b2Body* b = world->GetBodyList(); b; b = b->GetNext())
{
    CCLOG(@"Hello One");
    MyBodyData* data = (MyBodyData*)b->GetUserData();
    if (data!=0 && data->someNumber != 0)
    {
        int temp;
        temp = data->someNumber;
        CCLOG(@"Hello Again! %d",temp);
    }
}

它将 someNumber 显示为 6-7 位长的内存地址,而不是值“4”。

我错过了什么?

【问题讨论】:

    标签: iphone c++ struct cocos2d-iphone box2d


    【解决方案1】:
    body1->SetUserData(&bodyData);
    

    您将正文数据设置为 指针的地址 bodyData。你不想这样,你想把它设置为bodyData。所以:

    body1->SetUserData(bodyData);
    

    【讨论】:

      猜你喜欢
      • 2018-07-17
      • 1970-01-01
      • 2019-01-12
      • 2021-04-04
      • 2011-12-07
      • 1970-01-01
      • 2023-02-04
      • 2020-09-09
      • 1970-01-01
      相关资源
      最近更新 更多