我对Cocos2d实例的行为感到有点困惑,我需要一些帮助。我从Cocos2D CCNode position in absolute screen coordinates借用了这段代码。非常简单:两个物体,一个是另一个物体的孩子。
运行下面的代码片段,我得到的是worldCoord =(50,200)。我的期望是翻译会导致worldCoord =(100,150)。当我在CGAffineTransform中逐步执行代码时,tx = 100,并且ty = 150。为什么呢?
CCNode * myNode = [[CCNode alloc] init];
[myNode setAnchorPoint:CGPointZero];
myNode.position = CGPointMake(150.0f, 100.0f);
CCNode * mySprite = [[CCNode alloc] init]; // CCSprite is a descendant of CCNode
[mySprite setAnchorPoint:CGPointZero];
[myNode addChild: mySprite];
mySprite.position = CGPointMake(-50.0f, 50.0f);
// we now have a node with a sprite in in. On this sprite (well, maybe
// it you should attack the node to a scene) you can call convertToWorldSpace:
CGPoint worldCoord = [mySprite convertToWorldSpaceAR: mySprite.position];
答案 0 :(得分:1)
考虑到mySprite是myNode的子节点,因此被myNode位置偏移:
myNode.position = CGPointMake(150.0f, 100.0f);
mySprite.position = CGPointMake(-50.0f, 50.0f);
那么你认为mySprite的世界pos应该是:
是正确的X: (150 + -50) = 100
Y: (100 + 50) = 150
要获得精灵的世界位置,请使用convertToWorldSpace
的非AR变体:
CGPoint worldCoord = [myNode convertToWorldSpace: mySprite.position];
请注意,您需要使用父节点进行转换,因为它定义了子节点的坐标空间。换句话说,子节点的原点(0,0)等同于其父节点的位置。
该方法的变体也不会受到精灵的anchorPoint变化的影响。更改精灵锚点时,只有'AR'变体的结果会发生变化。
“AR”变体只是将节点的anchorPoint
添加到转换前的位置。假设您的精灵的contentSize
为100x100且anchorPoint
的默认值为0.5,0.5,则在转换为世界空间之前,会将{50}添加到mySprite.position
。换句话说,它将精灵纹理的左下角与精灵位置之间的偏移添加到转换后的位置。