ios - 如何获取 SKAction(名称 :) to work reliably?

标签 ios xcode sprite-kit ios9 skaction

我一直在研究 DemoBots 示例,但在让它在所有设备上运行时遇到了很多麻烦。

https://developer.apple.com/library/prerelease/ios/samplecode/DemoBots/Introduction/Intro.html

我目前遇到的问题是,在 iPad Mini 上应用程序启动但在加载动画时崩溃。它在 AnimationComponent.swift 中从文件加载 Action 的行崩溃:

let bodyAction: SKAction?  
if let name = bodyActionName {
    // crash here  
    bodyAction = SKAction(named: name)  
}  
else {  
    bodyAction = nil  
}  

调试该应用程序表明它试图加载一个名为“ZappedShake”的 SKAction,但因数组越界异常而崩溃。

在 iPhone 5S 上运行良好。我最好的猜测是它与更快的 iPhone 5S 的竞争条件正在加载其中包含序列化操作的文件,并且在执行到这一点时操作可用。但在单核旧版 iPad 上,文件尚未加载,调用失败。

两者都是运行 iOS9 13A4325c 的真实硬件,在 XCode Version 7.0 beta 4 (7A165t) 上编译。

使问题变得更加困难的是,我看不到明显创建“ZappedShake”的文件 - ReferenceActions.sks - 实际加载的位置。它由 ReferenceScene.sks 引用,但在任何代码或项目中的任何其他地方我都看不到该文件被引用。

SKActions 是否有某种名称约定神奇的文件加载机制?为什么它适用于 iPhone 5S 而不适用于 iPad?

更新:在这里找到更多相关信息:http://asciiwwdc.com/2015/sessions/604

今年我们还专注于引用和实例化。 我们知道您花了很多时间为您的游戏设计高质量的内容和动画,我们希望您可以在任何您喜欢的地方重复使用这些内容。

我们允许您为您的节点和操作创建序列化数据文件,然后将它们添加为引用,而不是仅仅将它们加载到您的场景中。

这样,每次您对源 Assets 进行更改时,都会自动反射(reflect)在您的游戏内容中。

我如何为节点执行此操作?对于节点,我在 Xcode 的编辑器中设计部分场景,可能是背景元素或一些风景,然后我可以将这些文件拖放到 Xcode 中的主场景中,它会自动创建一个引用,它都为你准备好了。

如果您想在代码中执行此操作,您也可以手动构造一个 SKReferenceNode,为其分配一个文件名甚至一个 URL,当该内容首次出现在您的游戏中时,我们将加载该内容基于您的 bundle 中文件的最新版本。 我们也可以对 Action 做同样的事情。有了 Action ,请查看我们出色的新 Action 编辑器,除了在 Xcode 中创建和组合 Action 之外,您还可以为它们命名。

这些名称是在您的游戏中使用它们的关键。我们在 SKAction 中添加了一个名为 actionNamed 的选择器。这与它对 SKTexture 和 textureNamed 的作用一样。

您传入所需操作的名称。我们将在所有序列化操作文件中自动查看您的应用程序包的内部,找到具有适当名称的文件,然后将其显示给应用程序。

这看起来不错,但我找不到任何关于它的文档,也找不到出错时如何调试它。

最佳答案

不是你,是 iOS。影响 32 位设备(如 iPad Mini)的 Action 引用存在错误。

这个问题已经在 iOS 9.2 Beta 1 中得到修复,根据 Apple 开发者论坛上的这个帖子: https://forums.developer.apple.com/thread/17267

尝试在更新的 64 位设备(如 iPhone 6)上运行模拟器。或者尝试将您的 iPad Mini 升级到 iOS 9.2 Beta 1。或者等待下一个 iOS 版本来解决问题。

关于ios - 如何获取 SKAction(名称 :) to work reliably?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32238883/

相关文章:

database - 为什么在 SQLite 中插入一个 Integer 会失败?

xcode - “Allocated Prior to Attach” 在 Xcode 仪器中是什么意思?

iOS SpriteKit : resizing SKSpriteNode

ios - 如果删除 SKAction,补全仍然运行吗?

ios - 制作一个属于 UIPageViewController 一部分的工具栏

objective-c - 如何在 Cocoa 中解析 XML?

ios - 非可选类型可以为零吗?

swift - GK状态 : Why is StateMachine == nil on delegate call?

ios - 以小于其固有尺寸的尺寸显示 UIImageView

ios - 与 Alamofire 一起使用时未调用 cellForRowAtIndexPath