2011-11-03 3 views
1

제 Box2d 게임에서 게임 루프에서 CCSprite 위치를 업데이트해야 제대로 작동합니다. 나는 Box2D 문서를 통해 어떤 API가 b2Body 좌표를 얻는지를 보았지만 아무 것도 보지 못했고 이것이 분명하지 않은 것으로 보인다. 각 CCSprite를 수동으로 이동해야합니까, 아니면 모든 CCSprite를 화면의 b2Bodys로 쉽게 이동할 수 있습니까?b2Body가 움직일 때 CCSprite 위치를 업데이트 하시겠습니까?

누구든지이 작업을 수행하는 방법에 대해 알고 있습니까?

감사합니다.

편집 1 : 이 코드는 내 세계의 모든 스프라이트를 해당하는 b2Body로 업데이트하겠습니까? 그리고 이것은 x와 y 축과 회전이 올바로 작동할까요? [: @selector (:) 진드기 자체 일정]이

같은 틱 방법이 초기화 수업 일정에

:

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

단순히 이렇게

-(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

위의 코드와 동일하게 작동 할 것입니다. 맞습니까? –

관련 문제