- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对我的 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/
我对我的 Cocos2d 实例的行为有点困惑,我需要一些帮助。我从 Cocos2D CCNode position in absolute screen coordinates 借用了这段代码.非常简
我是一名优秀的程序员,十分优秀!