gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:45:13 27 4
gpt4 key购买 nike

我对我的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com