使 spritekit 中的 SKLabelNode 出现在所有其他精灵之上

Posted

技术标签:

【中文标题】使 spritekit 中的 SKLabelNode 出现在所有其他精灵之上【英文标题】:Make a SKLabelNode in spritekit appear above all other sprites 【发布时间】:2014-08-07 04:06:33 【问题描述】:

您好,我对编程很陌生,我遇到了一个小问题。我正在创建一个带有分数标签的简单游戏。但是,只要向下滚动的障碍物通过,就会覆盖分数标签。我希望分数标签不会被障碍物覆盖。有没有办法可以更改 spritekit 中的精灵层次结构?谢谢

【问题讨论】:

【参考方案1】:

我建议为应该固定在屏幕上的静态内容创建一个节点(例如游戏 HUD)。然后将此节点的 zPosition 设置为高于游戏节点(所有游戏对象都放置和操作的地方)。

如果需要,这也可以更轻松地实现相机或移动游戏节点,而无需移动分数标签或任何其他固定的 hud 元素。

所以你会有这样的东西:

SKNode *hudNode = [SKNode node];
hudNode.zPosition = 1000;
[hudNode addChild:scoreLabel];

SKNode *gamePlayNode = [SKNode node];
gamePlayNode.zPosition = 0; // Not mandatory as it defaults to 0 but I put this here for clarification

[self addChild:hudNode]; // self is your scene instance
[self addChild:gamePlayNode]; 

【讨论】:

【参考方案2】:

您可以更改标签节点的 zPosition 属性,将其设为 100,它将高于所有其他节点(默认值为 0.0):

labelNode.zPosition = 100;

【讨论】:

任意高值都可以。 谢谢你是绝对正确的。如果他没有为其他节点设置任何 zPosition 值,即使将其设置为 0.1 也可以。【参考方案3】:

节点按照添加到场景(或父节点)的顺序绘制。您可以通过设置节点的 zPosition 属性来更改节点的绘制顺序。

来自 Apple 的文档...

...z 位置是节点相对于其父节点的高度,很像节点的位置 属性表示其相对于父级的 x 和 y 位置 位置。因此,您使用 z 位置将节点放置在 父母的立场。

当你考虑 z 位置时,节点树是这样的 渲染:

计算每个节点的全局 z 位置。 节点按从最小 z 值到最大 z 值的顺序绘制。 如果两个节点共享相同的 z 值,则先渲染祖先节点,然后按子节点顺序渲染兄弟节点。

您还可以使用 zPosition 来优化渲染性能...

...如果 Sprite Kit 可以收集所有共享相同纹理和绘图模式的节点并使用单个绘图通道绘制它们可能会更好。要启用这些类型的优化,请将视图的 ignoresSiblingOrder 属性设置为 YES。

【讨论】:

以上是关于使 spritekit 中的 SKLabelNode 出现在所有其他精灵之上的主要内容,如果未能解决你的问题,请参考以下文章

将 UIButton 的属性赋予 SpriteKit 中的 SKSpriteNode

SpriteKit - 如何使用“挡板”使奖品轮减速?

Gamecenter init/authentication 使 SpriteKit 的精灵运动滞后

无法使应用程序进入主菜单(Swift 4 SpriteKit)

SpriteKit SKSequence 使 UI Buttons 出现

Swift - SpriteKit:如果添加不同的“addchild”父母,使精灵相互反应