2013-04-24 3 views
0

У меня есть вопрос, который меня убивает ...вращающегося тела и прикрепленный спрайт в Box2D

Я использую LevelHelper, чтобы уровень в Box2d. Поэтому у меня треугольный спрайт, прикрепленный к треугольному телу.

Теперь проблема в том, что я хочу повернуть это тело в положение и повернуть прилагаемый спрайт.

Здесь у вас есть код:

//Detecting my actor and my sprite 
if (b->GetType() == b2_dynamicBody && myActor == [loader spriteWithUniqueName:@"radar."]){ 
     radar = b; 
     radarSprite = myActor; 
    } 

Просто хотел попробовать с 20 градусов, но это не вращается.

//trying to rotate inside TICK: Method 

    float32 b2Angle = -1 * CC_DEGREES_TO_RADIANS(20); 
    radar->SetTransform(radar->GetPosition(), b2Angle); 
    radarSprite.position = ccp(radar->GetPosition().x,radar->GetPosition().y); 

Любые советы?

спасибо, что заблаговременно !!

ответ

1

вы ошибку, вы поворачиваете только тело физико- levelhelper есть метод в LHSprite называется tranformRotation, так что вам нужно сделать, это:

этот способ повернуть тело и спрайт (если тело приложить к спрайт):

//radarSprite is a LHSprite 
float32 b2Angle = -1 * CC_DEGREES_TO_RADIANS(20); 
[radarSprite transformRotation:b2Angle]; 
[radarSprite transformPosition:ccp(radar->GetPosition().x,radar->GetPosition().y)]; 

, если у вас есть тело отдельно от спрайта вы можете сделать это:

//radarSprite is a LHSprite 
float32 b2Angle = -1 * CC_DEGREES_TO_RADIANS(20); 
radar->SetTransform(radar->GetPosition(), b2Angle); 
[radarSprite transformRotation:b2Angle]; 
[radarSprite transformPosition:ccp(radar->GetPosition().x,radar->GetPosition().y)]; 


EDIT:

метод spriteWithUniqueName возвращают LHSprite, но если вы используете CCSprite вы можете сделать это:

//radarSprite is a CCSprite 
float32 b2Angle = -1 * CC_DEGREES_TO_RADIANS(20); 
radar->SetTransform(radar->GetPosition(), b2Angle); 
[radarSprite setRotation:b2Angle]; 
[radarSprite setPosition:ccp(radar->GetPosition().x,radar->GetPosition().y)]; 
+0

Это выглядит очень красиво, я должен загрузить LHSprite.h, потому что я не работаю с этот класс. Я попробую это позже. Большое спасибо! – mursang

+0

Теперь он не работает: if (b-> GetType() == b2_dynamicBody && myActor == [loader spriteWithUniqueName: @ "радар."]) { radarSprite = (LHSprite *) b-> GetUserData() ; } – mursang

+0

метод spriteWithUniqueName возвращает LHSprite, но если вы используете CCSprite, вы можете использовать второй вариант и заменить «transform» на «set» .... редактировать сообщение. – busta117

Смежные вопросы