1

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

4

3 回答 3

3

我建议为应该固定在屏幕上的静态内容创建一个节点(如游戏 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]; 
于 2014-08-07T07:03:24.170 回答
2

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

labelNode.zPosition = 100;
于 2014-08-07T04:42:35.310 回答
2

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

从苹果的文档...

...z 位置是节点相对于其父节点的高度,就像节点的位置属性表示其相对于父节点位置的 x 和 y 位置一样。因此,您使用 z 位置将节点放置在父级位置的上方或下方。

当您考虑 z 位置时,节点树的呈现方式如下:

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

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

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

于 2014-08-07T05:56:46.980 回答