在我的游戏中,我有一个Ccsprite用于箭头,一个b2body用于球…我试着把球扔向我的箭头精灵所指向的方向。这是我的代码…我在计算箭头精灵的旋转,然后在那个角度上对球施加脉冲……
float totalRotation = arrow.rotation ;
ballBody->ApplyLinearImpulse(b2Vec2(10.0f+cos(totalRotation)*25.0f,10.0f+sin(totalRotation)*25.0f), eggBody->GetWorldCenter());
但是,这不是工作完全…球被扔向不正确的方向
CCNode(以及继承自CCNode的CCSprite)的rotation
属性以度为单位测量,顺时针旋转为正。Box2D世界使用弧度来测量角度,逆时针旋转为正,这对于笛卡尔坐标系来说更传统。为了向Box2D函数提供正确的角度,您必须进行转换。在Cocos2D中,转换是这样的:
float angle = - 1 * CC_DEGREES_TO_RADIANS(totalRotation);
宏将totalRotation从度转换为弧度,并乘以-1,因为Box2D在逆时针方向测量正角度,这与CCNode旋转相反。