ios - 使用 convertToWorldSpaceAR 翻译 CCNode 时遇到问题

标签 ios objective-c cocos2d-iphone

我对我的 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];

最佳答案

考虑到 mySprite 是 myNode 的子节点,因此偏移了 myNode 位置:

myNode.position = CGPointMake(150.0f, 100.0f);
mySprite.position = CGPointMake(-50.0f, 50.0f);

那么你假设 mySprite 的世界位置应该是正确的:

X: (150 + -50) = 100
Y: (100 +  50) = 150

要获取 Sprite 的世界位置,请使用 convertToWorldSpace 的非 AR 变体:

CGPoint worldCoord = [myNode convertToWorldSpace: mySprite.position];

请注意,您需要使用父节点进行转换,因为它为其子节点定义了坐标空间。换句话说,子节点的原点 (0,0) 相当于其父节点的位置。

该方法的变体也不会受到 sprite anchor 变化的影响。当您更改 sprite anchor 时,只有“AR”变体的结果会发生变化。

'AR' 变体只是在转换之前将节点的 anchorPoint 添加到位置。假设你的 sprite 的 contentSize 是 100x100 并且 anchorPoint 是默认的 0.5,0.5 那么 50,50 在被转换之前被添加到 mySprite.position到世界空间。换句话说,它将 Sprite 纹理的左下角与 Sprite 位置之间的偏移量添加到转换后的位置。

关于ios - 使用 convertToWorldSpaceAR 翻译 CCNode 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23827245/

相关文章:

iphone - 滚动时 UITableView 应用程序崩溃

ios - UIImagePickerController使iPad上的应用程序崩溃,但iPhone崩溃

cocos2d-iphone - 渲染和 CPU 会忽略屏幕外动画吗?

iphone - 清除所有目标/清空缓存后,iPhone生成错误

c++ - 编译cocos2d-x v3 IOS项目时出错,关于集成AdMob(IOS)框架

ios - CASpringAnimation的initialVelocity的单位是什么?

iphone - 使用ARC的最低要求

objective-c - [[NSMutableArray alloc] init] 和 [@[] mutableCopy] 有什么区别?

ios - A* 仅在某些情况下有效

iphone - cocos2d facebook 集成失败