2011-11-03 68 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

我认为这将与我上面发布的代码一样工作,对吗? –