Sprite kit 在spritekit中使SKLabelNode显示在所有其他精灵的上方

Sprite kit 在spritekit中使SKLabelNode显示在所有其他精灵的上方,sprite-kit,hierarchy,skspritenode,sklabelnode,Sprite Kit,Hierarchy,Skspritenode,Sklabelnode,嗨,我是编程新手,我遇到了一个小问题。我正在创建一个带有分数标签的简单游戏。但是,每当向下滚动的障碍物通过时,分数标签就会被覆盖。我希望分数标签不被障碍物覆盖。有没有办法改变spritekit中的精灵层次结构?谢谢您可以更改标签节点的zPosition属性,将其设置为100,它将高于所有其他节点(默认值为0.0): 您可以更改标签节点的zPosition属性,将其设置为100,它将位于所有其他节点之上(默认值为0.0): 节点按添加到场景(或父节点)的顺序绘制。通过设置节点的zPosition属

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

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


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


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

从苹果的文档中

…z位置是节点相对于其父节点的高度,与节点的位置类似 属性表示其相对于父对象的x和y位置 位置。因此,可以使用z位置将节点放置在 家长的立场

当您考虑z位置时,下面是节点树的结构 呈现:

  • 计算每个节点的全局z位置
  • 节点按从最小z值到最大z值的顺序绘制
  • 如果两个节点共享相同的z值,则先渲染祖先节点,然后按子级顺序渲染同级节点
您还可以使用zPosition优化渲染性能

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


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

从苹果的文档中

…z位置是节点相对于其父节点的高度,与节点的位置类似 属性表示其相对于父对象的x和y位置 位置。因此,可以使用z位置将节点放置在 家长的立场

当您考虑z位置时,下面是节点树的结构 呈现:

  • 计算每个节点的全局z位置
  • 节点按从最小z值到最大z值的顺序绘制
  • 如果两个节点共享相同的z值,则先渲染祖先节点,然后按子级顺序渲染同级节点
您还可以使用zPosition优化渲染性能

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


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

这也使得在不移动分数标签或任何其他固定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]; 

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

这也使得在不移动分数标签或任何其他固定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]; 

任何任意的高值都可以。Thx您绝对正确。如果他没有为其他节点设置zPosition的任何值,即使将其设置为0.1也可以。任何任意高的值都可以。Thx您完全正确。如果他没有为其他节点设置zPosition的任何值,即使将其设置为0.1也会起作用。