我对我的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];发布于 2014-05-24 09:41:09
考虑到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,那么在转换到world空间之前,50,50被添加到mySprite.position中。换句话说,它将雪碧纹理的左下角之间的偏移添加到精灵的位置到转换的位置。
https://stackoverflow.com/questions/23827245
复制相似问题