嗨,我对编程很新,我遇到了一个小问题。我正在创建一个有分数标签的简单游戏。但是,只要向下滚动的障碍物通过,就会覆盖分数标签。我希望得分标签不被障碍覆盖。有没有办法可以改变spritekit中的sprite层次结构?感谢
答案 0 :(得分: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];
答案 1 :(得分:2)
您可以更改标签节点的zPosition属性,使其为100,它将高于所有其他节点(默认值为0.0):
labelNode.zPosition = 100;
答案 2 :(得分:2)
节点按照添加到场景(或父节点)的顺序绘制。您可以通过设置zPosition属性来更改绘制节点的顺序。
来自Apple的文档......
... z位置是节点相对于其父节点的高度,与节点的位置相同 property表示相对于父级的x和y位置 位置。因此,您使用z位置将节点放在上方或下方 父母的立场。
考虑z位置时,节点树的方式如下 渲染:
- 计算每个节点的全局z位置。
- 按照从最小z值到最大z值的顺序绘制节点。
- 如果两个节点共享相同的z值,则首先呈现祖先,并按子顺序呈现兄弟节点。
您还可以使用zPosition优化渲染性能......
...如果Sprite Kit可以收集共享相同纹理和绘图模式的所有节点并使用单个绘图过程绘制它们可能会更好。要启用这些类型的优化,请将视图的ignoresSiblingOrder属性设置为YES。