2012-02-23 52 views
1

我已经成功地创建了userData的结构,但是当我使用如何在UserData结构中包含/检索/设置正文的位置?

ballBodyDef.userData = _ball; 

切换到

MyBodyData *bodyData = new MyBodyData(); 
bodyData->someNumber = 4; 
bodyData->sprite = _ball; 
_body->SetUserData(bodyData); 

以下失败:

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的位置这一事实有关,但我不知道如何使用struct包含/检索/设置正文的位置...

回答

1
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 
} 
+0

是的!在我还没有完全理解的情况下,我还没有意识到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-> GetPosition()。y * PTM_RATIO); myActor.rotation = -1 * CC_RADIANS_TO_DEGREES(b-> GetAngle());}}} – 2012-02-23 19:10:33

相关问题