是否有一种简单的方法(即api)将世界空间中的旋转角度转换为CCNode的局部空间?我知道一个节点需要在屏幕上的旋转角度,但是节点深深地嵌套在节点层次结构中,我想设置它的角度以便它匹配我想要的。如果没有api,我应该做什么CC api调用?像这样:
CCNode * myLocalNode;
float myLocalAngle = CCAngleConvertFromWorldToNode(myLocalNode,myWorldAngle);
myLocalNode -> setRotation(myLocalAngle);
答案 0 :(得分:0)
我认为最好的方法是获得两个参考点,一个代表原点,另一个代表旋转矢量。将这2个点转换为节点空间,测量它们之间的向量(减法)并将其转换为角度。这里有2个方法,应该是CCNode的一个类别(注意:我指的是self),一个到世界,另一个到节点。
-(float) convertRotationToWorldSpace:(float)rotation
{
CGPoint rot = ccpForAngle(-CC_DEGREES_TO_RADIANS(rotation));
CGPoint worldPt = [self convertToWorldSpace:rot];
CGPoint worldOriginPt = [self convertToWorldSpace:CGPointZero];
CGPoint worldVec = ccpSub(worldPt, worldOriginPt);
return -CC_RADIANS_TO_DEGREES(ccpToAngle(worldVec));
}
-(float) convertRotationToNodeSpace:(float)rotation
{
CGPoint rot = ccpForAngle(-CC_DEGREES_TO_RADIANS(rotation));
CGPoint nodePt = [self convertToNodeSpace:rot];
CGPoint nodeOriginPt = [self convertToNodeSpace:CGPointZero];
CGPoint nodeVec = ccpSub(nodePt, nodeOriginPt);
return -CC_RADIANS_TO_DEGREES(ccpToAngle(nodeVec));
}