iOS9 Sprite Kit问题

17

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

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

我的问题是,在模拟器或设备上运行游戏时,所有精灵的zPosition位置似乎随机出现。我已经在Stack Overflow上搜索了答案,但没有找到解决方法,到目前为止,我尝试了以下方法:

  • 将所有图像移动到.xcassets中 如此描述
  • 在构建设置下将iOS开发目标更改为iOS 9.0
  • 在代码中将所有图像更改为包括其扩展名,即 "background.png"

但图片仍然以表层随意排列,有谁可以推荐解决方法或其它可能的解决方案吗?

谢谢。


1
只是好奇,你是否使用了 ignoresSiblingsOrder = true,并且是否已经明确设置了所有节点的 zPositions? - Whirlwind
4
我在使用Sprite Kit 和 Xcode 7时遇到了很多问题。改变图层顺序、动画速度过快和触摸检测的变化。现在无法检测到隐藏精灵节点的触摸。即使将alpha设为0.0也不起作用,必须将其设置为0.001才能使其重新生效。 - Tobias Lott
我也遇到了图片消失的问题。此外,我通过不暂停出场场景来实现了漂亮的视差场景过渡。现在这个功能似乎也出了问题;在场景过渡期间,我的进场和出场场景都被暂停了。 - empee
这次更新对我的实时游戏来说是灾难性的。性能也受到了巨大的影响,显然是由于SKCropNodes的更改所致。而苹果公司唯一的回应就是“请创建一个错误报告”。 - Smikey
@TobiasLott Sprite Kit触摸/节点检测不再识别alpha为0的节点,但更好的解决方案是将其设置为1 alpha,并使用颜色UIColor.clearColor()。 - Naftali Beder
4个回答

15

iOS 9 GM中的SpriteKit非常不稳定。我不知道苹果在做什么,但是一些人应该被开除。在这里查看所有的投诉:https://forums.developer.apple.com

我的问题之一是,当我通过imageNamed初始化函数加载SKSpriteNode时,有时精灵会出现,有时不会出现。我正在使用设备特定的图像,并且有时相同的代码行将加载Rock@2x〜ipad.png,因为它是我的设备特定的图像,有时它将加载Rock.png,因为我没有包括通用图像。

我已经向Apple报告了这个错误,但他们还没有修复它。他们要求我提供测试场景,我已经用不同的方式解释了3次,现在我已经无话可说。

此时我所能做的就是告诉你尽快向苹果报告这些错误,并祈祷有聪明的人会阅读你的错误报告并采取措施。


4
我曾经遇到过这个问题,通过在第一层背景上添加 zPosition = -1 并在每个其他精灵上再次使用 zPosition 来解决正确排序的问题。虽然非常烦人,但问题得到了解决。希望这可以帮到你。 - Rich Townsend
1
这太糟糕了。说实话,我不知道它是如何以这种方式发布的。 - Jamona Mican
@PsyKX如果苹果需要一个可重现的例子,我是按照这个教程进行的:http://bigspritegames.com/isometric-tile-based-game-part-1/#comment-3976 如果你下载完成的例子:http://bigspritegames.com/?wpdmdl=372(可能需要使用Xcode 7快速进行Swift 2转换),你会发现有4个墙壁精灵没有渲染。我自己用Objective C按照教程操作,结果也是一样的,尽管在开始“iso_3d_”图块部分之前,它运行良好(所有图块都正确渲染)。 - Zhang
@RichTownsend 谢谢您发布关于 zPosition 的内容。那帮助我解决了一些问题。 - Aaron Lelevier

8

正如@tobias-lott在评论中提到的那样,我不得不为每个精灵都加上zPosition,而不是让代码自动排序精灵。


5

我曾经遇到过随机zPositions的问题,后来我在GameViewController.swift中注意到了以下内容:

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

ignoresSiblingOrder 改为 false,问题得以解决。


1
将 ignoresSiblingOrder 改为 false,也解决了我的问题。 - spacecash21

-3

4
"使用Swift 2.0构建您的应用程序"...... 想象一下,你用Objective C开发了一个功能丰富的游戏,它仍然受到苹果公司的高度认可和支持。但是,为了使其在iOS 9上运行,需要重写每一行代码,这似乎不是最好的解决方案。 - empee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接