2011-11-03 66 views
1

在我的Box2d遊戲中,我發現我必須在遊戲循環中更新我的CCSprite位置,以便它正常工作。我已經瀏覽了Box2D文檔,看看有哪些API可以獲得b2Body座標,但我沒有看到任何內容,這似乎不清楚。 我應該手動移動每個CCSprite還是有一種簡單的方法將屏幕上的所有CCSprite移動到與它們關聯的b2Bodys?當b2Body移動時更新CCSprite位置?

有沒有人有任何想法如何做到這一點?

謝謝!

編輯1: 這段代碼是否將我的世界中的每個精靈都更新爲與它們對應的b2Body?這將與x和y軸一起工作,旋轉是否正確?

for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()) { 
     if (b->GetUserData() != NULL) { 
      CCSprite *sprite = (CCSprite *)b->GetUserData(); 

      b2Vec2 b2Position = b2Vec2(sprite.position.x/PTM_RATIO, 
             sprite.position.y/PTM_RATIO); 
      float32 b2Angle = -1 * CC_DEGREES_TO_RADIANS(sprite.rotation); 

      b->SetTransform(b2Position, b2Angle); 
     } 
    } 
+0

看到了這個問題:http://stackoverflow.com/questions/2336825/how-to-set-the-position-of-a-sprite-within-a-box2d-body – LearnCocos2D

+0

啊我明白了。所以這種方法是手動做的,有沒有辦法自動做或不應該這樣做呢? –

+0

沒關係,這是自動的,但我沒有SpriteClass –

回答

3

簡單的做到這些:

在你的init課表這樣

刻度方法[自時間表:@selector(打勾:)]。

-(void)tick: (ccTime) dt 


for (b2Body* b = world->GetBodyList(); b; b = b->GetNext()) 
{ 
    if (b->GetUserData() != NULL) 
    { 
     CCSprite *spr= (CCSprite*)b->GetUserData(); 
     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()); 
    } 

}

+0

我認爲這將與我上面發佈的代碼一樣工作,對嗎? –