0

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

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

1 回答 1

0

我认为最好的方法是获取两个参考点,一个代表原点,另一个代表旋转矢量。将这 2 个点转换为节点空间,测量它们之间的向量(减法)并将其转换为角度。这里有2个方法应该是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));
}
于 2014-02-20T16:14:13.327 回答