CCNode 内部元素的定位

Posted

技术标签:

【中文标题】CCNode 内部元素的定位【英文标题】:Positioning of elements inside CCNode 【发布时间】:2014-04-28 20:27:55 【问题描述】:

我在 SpriteBuilder 中创建了一个 CCNode,并添加了一些子节点(标签、按钮和精灵)。在 SpriteBuilder 上,我使子节点的位置相对于父节点的左上角保持不变。

在运行时,我更改了父节点内容的大小,但子节点的位置相对于顶部不会保持不变。

我要做的扩展节点:

self.contentSize = CGSizeMake(self.contentSize.width, self.contentSize.height+50);

我在扩展前后检查颜色节点(给出深蓝色的节点,它是正在扩展的节点的子节点,并且具有 100% 的高度)contentsize,它确实增加了 50 个点,但在截图我们可以看到深蓝色区域没有增加。

我还检查了扩展前后标题标签的位置,它与左上角的点数相同。但是在截图中我们可以看到它离顶部更远。

【问题讨论】:

我在SpriteBuilder中一般不使用定位。我更喜欢用代码编辑位置。只需转到项目代码连接,选择 doc root var,然后为精灵写一个名称。现在在你的代码中,像往常一样定位它,“spriteName.position = ccp(where top left);” 如果位置与左上角相关(在代码和 spritebuilder 中),当父节点高度增加时,到左上角的距离不应该保持不变吗? 如果在代码中按点定位它,它将保持不变。但是您必须确保精灵的内容节点位于左上角或左下角,以便您有参考。如果它在底部, sprite.position = ccp(pointsX,size.height-pointsY);其中大小为:CGSize size = [[CCDirector sharedDirector]viewSize];因此,即使视图发生变化,您的精灵也会相对于左上角。 你父节点的锚点是什么?您能否添加一张图片来展示这 2 个场景的外观,以及您所看到的和得到的? @lucianomarisi 我已经添加了两张图片。 【参考方案1】:

没有代码很难说。

这里是一个代码 sn-p,它完成了 SpriteBuilder 视觉上所做的事情

someNode.positionType = CCPositionTypeMake(CCPositionUnitNormalized, CCPositionUnitNormalized, CCPositionReferenceCornerBottomLeft);

我希望这可以帮助您调试问题。您必须检查节点位置类型的参考角是否设置正确。

【讨论】:

赞成提供有助于调试过程的有用信息。

以上是关于CCNode 内部元素的定位的主要内容,如果未能解决你的问题,请参考以下文章

CCNode递归getChildByTag

用另一个 CCSprite/CCNode 剪辑 CCSprite/CCNode - Cocos2D

CCNode删除不起作用的Cocos2d

可拖动 CCNode Cocos2d

带有子节点的 CCNode 上的 Cocos2d-iphone v3 触摸事件检测

是否可以在单个 CCNode 对象上安排多个选择器或更新回调