Почему этот пример C ++ (cocos2d, box2d) дает указатель вместо значения? - PullRequest
1 голос
/ 23 февраля 2012

Я создаю эту структуру:

struct MyBodyData
{
    int someNumber;
};

, а затем создал новое тело:

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);

А затем попытался получить доступ к некоторому номеру здесь:

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".

Чего мне не хватает?

1 Ответ

4 голосов
/ 23 февраля 2012
body1->SetUserData(&bodyData);

Вы устанавливаете данные тела как адрес указателя bodyData. Вы не хотите этого, вы хотите установить bodyData. Итак:

body1->SetUserData(bodyData);
...