【问题标题】:iOS9 Sprite Kit issuesiOS9 Sprite Kit 问题
【发布时间】:2015-12-16 10:05:24
【问题描述】:

一切都很顺利,直到我升级到 xCode 7 和 iOS 9....

我目前的项目是一个 2D 平台游戏,自从升级以来,我就遇到了我们许多人似乎都面临的 sprite kit 错误/错误。

我的问题是,每次游戏在模拟器或设备上运行时,所有精灵的 zPosition 位置都会随机出现。我一直在寻找一个没有运气的答案,到目前为止我已经尝试过了。

  • 将所有图像移动到 .xcassets Like described here
  • 在 Build Settings 下将 iOS Development Target 更改为 iOS 9.0
  • 更改代码中的所有图像以包含其扩展名,即“background.png”

我仍然有同样的问题,图像本身显然是随机分层的,谁能推荐我可能错过的修复或其他一些可能的解决方案?

谢谢。

【问题讨论】:

  • 只是好奇,您是否使用了 ignoresSiblingsOrder = true 并为您的节点明确设置了所有 zPositions?
  • Sprite Kit 和 XCode 7 也有很多问题。更改了 zPositions,动画运行过快,并更改了触摸检测。不再检测到隐藏精灵节点的触摸。将 alpha 设置为 0.0 也不起作用。您必须将其设置为 0.001 之类的值才能使其再次工作。
  • 我遇到了相同的图像消失问题。此外,我通过不暂停传出场景实现了不错的视差场景转换。现在这似乎也坏了;在场景转换期间,传入和传出的场景都会为我暂停。
  • 这次更新对我的现场游戏来说是灾难性的。性能也受到了巨大的打击,显然是由于 SKCropNodes 的变化。 Apple 的所有回应都是“请创建错误报告”。
  • @TobiasLott Sprite Kit 触摸/节点检测不再识别具有 0 alpha 的节点,但更好的解决方案是将其设置为 1 alpha,颜色为 UIColor.clearColor()。

标签: ios swift debugging sprite-kit xcode7


【解决方案1】:

iOS 9 GM 中的 SpriteKit 严重损坏。我不知道他们在苹果公司做了什么,但有几个人应该被解雇。看看这里的所有投诉:https://forums.developer.apple.com

我的问题之一是,当我通过 imageNamed init 函数加载 SKSpriteNode 时,有时会出现精灵,有时不会。我正在使用特定于设备的图像,有时同一行代码会加载 Rock@2x~ipad.png,因为它是我的设备特定图像,所以会出现,有时它会加载 Rock.png,因为我不会出现未包含通用图像。

我已将此错误报告给 Apple,但他们尚未修复。他们要求我提供测试场景,我已经以不同的方式解释了 3 次,但这里的解释很短。

此时我所能做的就是告诉您尽快将这些错误报告给 Apple,然后让聪明的人阅读您的错误报告并对其进行处理。

【讨论】:

  • 我遇到了这个问题,我通过将 zPosition = -1 添加到第一个背景层来解决它,并在每个其他精灵上再次使用 zPosition 来整理精灵的正确顺序,真的很烦人但解决了问题.希望这会有所帮助。
  • 它出奇地坏了。老实说,我不知道它是如何以这种方式发布的。
  • @PsykX 如果 Apple 想要一个可重现的示例,我在这里遵循本教程:bigspritegames.com/isometric-tile-based-game-part-1/…,如果您下载完成的示例:bigspritegames.com/?wpdmdl=372(可能需要使用 Xcode 7 进行快速 Swift 2 转换) 你会看到 4 个墙精灵没有渲染。我自己使用 Objective C 遵循教程,结果是相同的,尽管在我开始“iso_3d_”瓷砖部分之前它运行良好(所有瓷砖都正确渲染)。
  • @RichTownsend 感谢您发布有关zPosition 的信息。这有助于解决我的一些问题。
【解决方案2】:

正如@tobias-lott 在他的评论中提到的那样,我不得不鞠躬将 zPosition 包含到每个 Sprite 中,而不是让代码对 sprite 进行排序。

【讨论】:

    【解决方案3】:

    我在使用随机 zPositions 时遇到了同样的问题,然后我在 GameViewController.swift 中注意到以下内容:

    /* Sprite Kit applies additional optimizations to improve rendering performance */
    skView.ignoresSiblingOrder = true
    

    ignoresSiblingOrder 更改为 false 解决了我的问题。

    【讨论】:

    • 将 ignoresSiblingOrder 更改为 false 也为我解决了这个问题。
    【解决方案4】:

    对您来说最好的方法是下载 Xcode 7 并重新构建您的应用程序并处理构建问题。

    随着 iOS 9 的推出,一些不推荐使用的 API 从 iOS 9 中删除,这导致应用程序崩溃。!

    我认为你身边也发生了同样的事情。

    您可以在此处找到所有最新更改:https://developer.apple.com/library/ios/releasenotes/General/iOS90APIDiffs/index.html

    使用 xcode 7 和 swift 2.0 构建您的应用程序。

    【讨论】:

    • "使用 swift 2.0 构建您的应用程序"....好吧,想象一下您构建了一个非常不错的游戏,其中包含许多功能。全部在 Objective C 中,它仍然非常有效并得到 Apple 的支持。为了让它在 iOS 9 上运行,不得不将每一段代码都重写为 Swift,这对我来说似乎不是最好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    相关资源
    最近更新 更多