0

在我的游戏中,我有一个 Ccsprite 用于箭头,一个 b2body 用于球......我试图将球扔向我的箭头精灵所指向的方向。这是我的代码...我正在计算箭头精灵的旋转,然后以该角度向球施加脉冲...

float totalRotation = arrow.rotation ;

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

但是,这不完全正常......球被扔向不正确的方向。

4

1 回答 1

0

rotationCCNode(以及继承自 CCNode 的 CCSprite)的属性以度为单位,顺时针旋转为正。Box2D 世界使用以弧度为单位的角度,逆时针旋转为正,这对于笛卡尔坐标系来说更为传统。为了向 Box2D 函数提供正确的角度,您必须进行转换。在 Cocos2D 中,转换是这样的:

float angle = - 1 * CC_DEGREES_TO_RADIANS(totalRotation);

宏将 totalRotation 从度数转换为弧度数,然后乘以 -1,因为 Box2D 测量的是逆时针方向的正角度,这与 CCNode 旋转相反。

于 2013-01-24T13:27:58.460 回答