Cocos2d iphone 将世界空间中的旋转角度转换为局部空间cocos2d

Cocos2d iphone 将世界空间中的旋转角度转换为局部空间cocos2d,cocos2d-iphone,cocos2d-x,Cocos2d Iphone,Cocos2d X,是否有一种简单的方法(即api)将世界空间中的旋转角度转换为CCNode的局部空间?我知道一个节点在屏幕上需要的旋转角度,但该节点在节点层次结构中嵌套得很深,我想设置它的角度,使其与我想要的匹配。如果没有api,我应该调用什么CC api?大概是这样的: CCNode * myLocalNode; float myLocalAngle = CCAngleConvertFromWorldToNode(myLocalNode,myWorldAngle); myLocalNode -> setR

是否有一种简单的方法(即api)将世界空间中的旋转角度转换为CCNode的局部空间?我知道一个节点在屏幕上需要的旋转角度,但该节点在节点层次结构中嵌套得很深,我想设置它的角度,使其与我想要的匹配。如果没有api,我应该调用什么CC api?大概是这样的:

CCNode * myLocalNode;
float myLocalAngle = CCAngleConvertFromWorldToNode(myLocalNode,myWorldAngle);
myLocalNode -> setRotation(myLocalAngle);

我认为最好的方法是得到两个参考点,一个代表原点,另一个代表旋转矢量。将这两个点转换为节点空间,测量它们之间的向量(减法)并将其转换为角度。这里有两个方法应该是CCNode的一个类别(注意:我指的是self),一个是world,另一个是node

-(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));
}

添加节点的旋转加上其所有父节点的旋转,然后添加角度(以度为单位)。如果需要,可以将结果调整到0-359的范围内,这就是想法,但是迭代执行会很麻烦。我发现了类似的东西,但还不确定它是否有效:ccpToAngle(myLocalNode->convertToNodeSpace(ccpToAngle(myWorldAngle)))。