【问题标题】:SpriteKit not respecting zPosition?SpriteKit 不尊重 zPosition?
【发布时间】:2014-02-11 17:47:30
【问题描述】:

addChild 和 zPosition 对场景有什么真正的影响?

我的意思是:假设我这样做

sprite1.zPosition = 50;
sprite2.zPosition = 10;
sprite3.zPosition = 30;

稍后再做

[self addChild:sprite1];
[self addChild:sprite2];
[self addChild:sprite3];

根据 SpriteKit 并考虑 zPosition 顺序,sprite1 应该在 sprite2 上渲染在 sprite3 上,但 spriteKit 忽略了这一点,并在 1 上渲染 3 over 2。

我错过了什么吗?

【问题讨论】:

  • 没有更多代码。代码就是这样。 3 层具有 3 个不同的 zPosition,但以随机顺序添加。 SpriteKit 应该尊重 zPosition 但事实并非如此。
  • 尝试在 addChild 之后而不是之前设置 zPosition。
  • 应该没什么区别。
  • 你能为这个案例做一个测试项目吗?或者直接从SKScene粘贴整个代码
  • 如果您显示更多代码,然后显示正在发生的事情与应该发生的事情的屏幕截图,将会有所帮助。

标签: ios iphone ipad sprite-kit


【解决方案1】:

如果他们有相同的父母,那将是正确的。如果他们可以不同的父母,父母的z顺序也被考虑在内。

场景渲染的标准行为遵循一对简单的规则:

  1. 父级在渲染其子级之前绘制其内容。
  2. 子项按照它们在子项中出现的顺序呈现 数组。

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

  1. 计算每个节点的全局 z 位置。
  2. 节点按从最小 z 值到最大 z 值的顺序绘制。
  3. 如果两个节点共享相同的 z 值,则先渲染祖先, 并且兄弟姐妹按子顺序呈现。

你可以在理解节点树的绘制顺序下找到很好的解释here

【讨论】:

  • 什么是真的? 321还是132? Spritekit 忽略 zPosition 并将其渲染为 321。
  • 123 应该是结果。正如 Jerome 所建议的,我们需要更多代码来提供更好的答案。
  • 123?你的意思是1在顶部还是在底部?所以,重要的是 addChild 顺序,而不是 zPosition。
  • 请阅读我在“这里”下发布的文档。 Z 位置很重要,但如果 2 个节点具有相同的 z 位置,则考虑添加顺序。您遇到的情况很奇怪,可能是由其他原因引起的。
  • Sprite Kit 按照添加到父节点的顺序绘制具有相同父节点的所有节点,zPosition 会覆盖此顺序。如果节点有不同的父节点,zPosition 无效。
【解决方案2】:

在您的游戏视图控制器中,将 ignoresSiblingOrder 属性设置为 false(或在 Objective-C 中为 NO)。

let skView = self.view as SKView
skView.ignoresSiblingOrder = false

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 2021-07-06
    • 2014-08-06
    • 2011-04-30
    • 2021-04-15
    相关资源
    最近更新 更多