我在图层中添加了一个精灵。转换图层时遇到很多问题。据我所知,一个图层的中心(anchorPoint)在左下角,一个图层在中间(对吗?) - 我对此并不完全确定。
在下图中,我用粉色表示 CClayer,用紫色表示 CCSprite。看看我认为中心在哪里。
当我将精灵添加到图层时,我认为 Cocos 会像在 A 中一样,但我希望它像在 B 中一样。我该怎么做?另一种可能性是C,我认为它更好,但这将涉及将图层的anchorPoint移动到中间并将精灵放在那里......我不知道如何做到这一点。
我在图层中添加了一个精灵。转换图层时遇到很多问题。据我所知,一个图层的中心(anchorPoint)在左下角,一个图层在中间(对吗?) - 我对此并不完全确定。
在下图中,我用粉色表示 CClayer,用紫色表示 CCSprite。看看我认为中心在哪里。
当我将精灵添加到图层时,我认为 Cocos 会像在 A 中一样,但我希望它像在 B 中一样。我该怎么做?另一种可能性是C,我认为它更好,但这将涉及将图层的anchorPoint移动到中间并将精灵放在那里......我不知道如何做到这一点。
更改 CCSprite 的锚点。
CCSprite *sprite = [CCSprite spriteWithFile:@"sprite.png"];
//For case A
sprite.anchorPoint = ccp(0.0f,0.0f);
sprite.position = ccp(0.0f,0.0f);
//For case B
sprite.anchorPoint = ccp(0.5f,0.5f);
sprite.position = ccp(0.0f,0.0f);
//For case c
sprite.position = ccp(ScreenWidth/2.0f, ScreenHeight/2.0f);
sprite.anchorPoint = ccp(0.5f,0.5f);
锚点是相对坐标。(0.f, 0.f) 是节点的左下角,(1.f, 1.f) 是右上角。所有的转换都与锚点相关。定位也是变换。这意味着在锚点 (0.5f, 0.5f) 的情况下,所有定位和其他变换都将相对于节点的中心应用。如果要将精灵放置在图层的左下角,只需将其锚点设置为 (0.f, 0.f) 并设置位置 (0.f, 0.f)。这意味着你的精灵的左下角将被放置到你的父层的 (0.f, 0.f) 坐标。
[sprite setAnchorPoint:ccp(0.f, 0.f)];
[sprite setPosition:ccp(0.f, 0.f)];
[layer addChild:sprite];
当我将精灵添加到图层时,我认为 Cocos 会像在 A 中一样,但我希望它像在 B 中一样。
不要试图猜测行为。将精灵添加到图层,看看会发生什么。
此外,CCNode
它的所有子类,包括CCSprite
,都有position
属性,它表示节点相对于其父节点的位置。