首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CCNode翻译convertToWorldSpaceAR时遇到的问题

使用CCNode翻译convertToWorldSpaceAR时遇到的问题
EN

Stack Overflow用户
提问于 2014-05-23 10:49:17
回答 1查看 254关注 0票数 1

我对我的Cocos2d实例的行为有点困惑,我需要一些帮助。我从Cocos2D CCNode position in absolute screen coordinates那里借用了这段代码。很简单:两个物体,一个是另一个的孩子。

运行下面的代码片段,我将得到worldCoord = (50,200)。我的期望是,翻译将导致worldCoord = (100,150)。当我遍历代码时,CGAffineTransform中的tx = 100和ty = 150。为什么?

代码语言:javascript
复制
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];
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-24 09:41:09

考虑到mySprite是myNode的子代,因此被myNode的位置所抵消:

代码语言:javascript
复制
myNode.position = CGPointMake(150.0f, 100.0f);
mySprite.position = CGPointMake(-50.0f, 50.0f);

那么,您正确地认为,mySprite的世界pos应该是:

代码语言:javascript
复制
X: (150 + -50) = 100
Y: (100 +  50) = 150

要获得精灵的世界地位,请使用convertToWorldSpace的非AR变体。

代码语言:javascript
复制
CGPoint worldCoord = [myNode convertToWorldSpace: mySprite.position];

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

该方法的此变体也不会受到雪碧anchorPoint中的更改的影响。只有'AR‘变体的结果会改变,当你改变雪碧锚点。

“AR”变体在转换节点之前简单地将节点的anchorPoint添加到该位置。假设您的雪碧的contentSize是100x100,并且anchorPoint是默认的0.5,0.5,那么在转换到world空间之前,50,50被添加到mySprite.position中。换句话说,它将雪碧纹理的左下角之间的偏移添加到精灵的位置到转换的位置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23827245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档