/ / Problem z rzucaniem b2body pod określonym kątem w grze Box2D - iphone, box2d, box2d-iphone

Problem z rzucaniem b2body pod określonym kątem w grze Box2D - iphone, box2d, box2d-iphone

w mojej grze mam jeden Ccsprite na strzały, ijeden b2body na piłkę ... próbuję rzucić piłkę w kierunku wskazanym przez mój duszek strzałkowy. tutaj jest mój kod ... liczę rotację sprite strzały, a potem przykładam impuls pod piłką pod tym kątem ...

float totalRotation = arrow.rotation ;

ballBody->ApplyLinearImpulse(b2Vec2(10.0f+cos(totalRotation)*25.0f,10.0f+sin(totalRotation)*25.0f), eggBody->GetWorldCenter());

BUt, to nie działa dokładnie ... piłka jest rzucana w niewłaściwym kierunku.

Odpowiedzi:

0 dla odpowiedzi № 1

The rotation właściwość CCNode (i CCSprite, któradziedziczony z CCNode) jest mierzony w stopniach, a obrót zgodny z ruchem wskazówek zegara jest dodatni. Świat Box2D używa kątów mierzonych w radianach, przy czym obrót w lewo jest dodatni, co jest bardziej konwencjonalne dla kartezjańskiego układu współrzędnych. Aby zapewnić poprawny kąt do funkcji Box2D, będziesz musiał dokonać konwersji. W Cocos2D konwersja przebiega następująco:

float angle = - 1 * CC_DEGREES_TO_RADIANS(totalRotation);

Makro konwertuje wartość totalRotation ze stopnido radianów, a mnożysz przez -1, ponieważ Box2D mierzy dodatnie kąty w kierunku przeciwnym do ruchu wskazówek zegara, co jest przeciwne do obrotu CCNode.