Struct 如何在UserData结构中包含/检索/设置主体的位置?

Struct 如何在UserData结构中包含/检索/设置主体的位置?,struct,cocos2d-iphone,box2d,Struct,Cocos2d Iphone,Box2d,我已经为UserData创建了一个结构,但是当我从使用 ballBodyDef.userData = _ball; 到 以下操作失败: for(b2Body *b = world->GetBodyList(); b; b=b->GetNext()) { { if (b->GetUserData() != NULL) { CCSprite *myActor = (CCSprite*)b->GetUse

我已经为UserData创建了一个结构,但是当我从使用

ballBodyDef.userData = _ball;

以下操作失败:

for(b2Body *b = world->GetBodyList(); b; b=b->GetNext()) {    
    {
        if (b->GetUserData() != NULL)
        {
            CCSprite *myActor = (CCSprite*)b->GetUserData();
            myActor.position = CGPointMake(
                                           b->GetPosition().x * PTM_RATIO,
                                           b->GetPosition().y * PTM_RATIO );
            myActor.rotation = -1 * CC_RADIANS_TO_DEGREES(b->GetAngle());
        }
    }
我确信这与编译器无法找到/设置myActor的位置有关,但我不知道如何使用结构包含/检索/设置主体的位置

 CCSprite *myActor = (CCSprite*)b->GetUserData();
您不能将
MyBodyData*
强制转换为
CCSprite*
。你必须写:

if (b->GetUserData() != NULL)
{
    MyBodyData *data = static_cast<MyBodyData*>(b->GetUserData());
    //then retrive any info you need from data
}
if(b->GetUserData()!=NULL)
{
MyBodyData*data=static_cast(b->GetUserData());
//然后从数据中检索您需要的任何信息
}
您不能将
MyBodyData*
强制转换为
CCSprite*
。你必须写:

if (b->GetUserData() != NULL)
{
    MyBodyData *data = static_cast<MyBodyData*>(b->GetUserData());
    //then retrive any info you need from data
}
if(b->GetUserData()!=NULL)
{
MyBodyData*data=static_cast(b->GetUserData());
//然后从数据中检索您需要的任何信息
}

是!我以前不知道static_cast,虽然我仍然不完全理解它,但我能够接受您的答案并使用它。有效的最终结果是:for(b2Body*b=world->GetBodyList();b;b=b->GetNext()){if(b->GetUserData()!=NULL){MyBodyData*data=static_cast(b->GetUserData());int temp=data->someNumber;CCSprite*myActor=data->sprite;myActor.position=CGPointMake(b->GetPosition().x*PTM_RATIO,b->GetUserData().y*PTM_RATIO);myActor.rotation=-1*CC_弧度到_度(b->GetAngle();}}}是的!我以前不知道static_cast,虽然我仍然不完全理解它,但我能够接受您的答案并使用它。有效的最终结果是:for(b2Body*b=world->GetBodyList();b;b=b->GetNext()){if(b->GetUserData()!=NULL){MyBodyData*data=static_cast(b->GetUserData());int temp=data->someNumber;CCSprite*myActor=data->sprite;myActor.position=CGPointMake(b->GetPosition().x*PTM_RATIO,b->GetUserData().y*PTM_RATIO);myActor.rotation=-1*CC_弧度到_度(b->GetAngle());}