cocos 2d 世界坐标 为 左下角 为 原点(0,0点), 而角度为以x轴正方向 顺时针旋转 为角度正方形( 与教科书的逆时针相反 ), 所以在角度旋转中要注意。
向量的弧度为, 以x轴为参照, y轴正负为 角度 旋转方向 , 即 30 度 和 270 的 绝对值 相同, 符号不相同, 所以弧度为负值时, 只要将符号去掉, 转换为角度并设置即可,相反如果为正值, 则需要转换为角度后, 用 360 ° 减去 得到的角度, 即可得出需要的旋转角度。
代码如下:
Sprite* spr = Sprite::create("CloseSelected.png");
spr->setPosition( Vec2(100, 40) );
this->addChild(spr);
//l = n(圆心角)× π(圆周率)× r(半径) / 180 = α(圆心角弧度数)× r(半径)
Vec2 posSpr = spr->getPosition();
Vec2 posTargetA(110, 50);//右上
log(" TargetA angel : %f ", posTargetA.getAngle());
Vec2 posTargetB(110, 30);
log(" TargetB angel : %f ", posTargetB.getAngle());
Vec2 posTargetC(90, 50);
log(" TargetC angel : %f ", posTargetC.getAngle());
Vec2 posTargetD(90, 30);
log(" TargetD angel : %f ", posTargetD.getAngle());
Vec2 posTarget = posTargetD;
Vec2 vecSurplus = (posTarget - spr->getPosition());
//spr->setRotation(45);
#if 1
if (vecSurplus.getAngle() < 0)
{
spr->setRotation( CC_RADIANS_TO_DEGREES( -vecSurplus.getAngle() ) );
}
else
{
// cocos 世界坐标系为 坐下角 为 0,0 点, 角度旋转为 沿x 正方向 顺时针 旋转 ( 一般教科书为 逆时针, 所以要转换一下 )
spr->setRotation( 360 - CC_RADIANS_TO_DEGREES(vecSurplus.getAngle()) );
}
#endif