【问题标题】:Why do my images sometimes not show in the simulator?为什么我的图像有时不会在模拟器中显示?
【发布时间】:2018-04-03 05:50:53
【问题描述】:

我目前正在开发一款只有几个屏幕的游戏。我在场景中添加了一些精灵纹理,如下所示。

为什么我的图像不能在模拟器中持续加载?

仪表板场景文件

仪表板模拟器尝试 1

这是在 iOS 模拟器中加载应用程序的一次尝试。如您所见,在此实例中没有从上面的 spritekit 场景文件中加载许多图像。

仪表板模拟器尝试 2

下面是在模拟器中加载仪表板场景的另一种尝试。结果视图完全不同,但没有更改任何代码。我不明白正在渲染的图像是如何变化的。

【问题讨论】:

  • 应该调用什么代码来显示图像?
  • 无代码。它们显示在 spritekit 场景文件中,如第一张图像所示。我必须使用代码来一致地显示图像吗?
  • 你至少会有更多的控制权
  • 已经检查过 z 位置了吗?
  • 所有 z-index 级别都设置为 0。让我觉得更奇怪的是显示的图像是随机的。我可以重新加载场景,但它并不一致。

标签: ios swift sprite-kit


【解决方案1】:

来自苹果

默认值为 0.0。正 z 轴向观察者投影,因此具有较大 z 位置值的节点更靠近观察者。渲染节点树时,会计算每个节点的高度(以绝对坐标表示),然后将树中的所有节点从最小的 z 位置值渲染到最大的 z 位置值。如果多个节点共享相同的 z 位置,则对这些节点进行排序,以便在其子节点之前绘制父节点,并且按照它们在父节点的子数组中出现的顺序呈现兄弟节点。命中测试以相反的顺序处理。

SKView 类的 ignoresSiblingOrder 属性控制是否为同一 z 位置的节点启用节点排序。

基本上,通过将它们全部设置为 0,您会随机选择它们将按照您希望的顺序进行布局。您可以尝试设置ignoresSiblingOrder 以查看您是否确实将它们以正确的顺序放置在代码中,并查看它们是否会以正确的顺序出现。

但我强烈建议您将它们放在结构化的 z 层顺序中,而不是这样做。

即。

background.zPosition = 0
hero.zPosition = 1
scoreLabel.zPosition = 500

再次来自 Apple 关于ignoresSiblingOrder

默认值为 false,表示当多个节点共享同一个 z 位置时,这些节点会按照确定的顺序进行排序和渲染。父母在他们的孩子之前渲染,兄弟姐妹按数组顺序渲染。当此属性设置为 true 时,在确定渲染顺序时将忽略树中节点的位置。同一 z 位置的节点的渲染顺序是任意的,每次渲染新帧时可能会发生变化。当忽略同级和父级顺序时,SpriteKit 会应用额外的优化来提高渲染性能。如果您需要以特定且确定的顺序呈现节点,则必须设置这些节点的 z 位置。

【讨论】:

  • 完美的解释,感谢您提供的文档 sn-ps。这对我来说是一个真正的问题。在我的场景初始化函数中设置 zPositions 后,我不再不一致地渲染视图
【解决方案2】:
  • 确保每张图片都可见:

    myImage.alpha = 1
    
  • 您已正确完全(大写字母、空格等)输入正确的图像名称

  • 图片在您的资产文件夹中

  • 您的图片没有被其他图片压缩

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    相关资源
    最近更新 更多