【发布时间】:2015-09-17 09:39:01
【问题描述】:
在这段代码上工作了几个小时没有成功,请指教:
我正在构建一个 ios 9 spritekit 游戏。这个方法:
func createFiringParticles(location:CGPoint, force:CGVector){
let fireEmitter = SKEmitterNode(fileNamed: "FireParticles")
fireEmitter!.position = location
fireEmitter!.name = "fireEmitter"
fireEmitter!.zPosition = 1
fireEmitter!.targetNode = self
fireEmitter!.numParticlesToEmit = 50
fireEmitter!.xAcceleration = force.dx
fireEmitter!.yAcceleration = -force.dy
self.addChild(fireEmitter!)
}
给出这个错误: 致命错误:在展开可选值时意外发现 nil
这个错误一开始没有启动(所以它会工作几分钟直到它崩溃)。我试图用 NSKeyedUnarchiver 解开 SKEmitterNode:
var unWrappedFireEmitter = NSBundle.mainBundle().pathForResource("FireParticles", ofType: "sks")!
var fireEmitter = NSKeyedUnarchiver.unarchiveObjectWithFile(unWrappedFireEmitter) as! SKEmitterNode
fireEmitter.position = location
fireEmitter.name = "fireEmitter"
..........
self.addChild(fireEmitter)
【问题讨论】:
-
您正在强制展开 (
!)。如果可选变量是nil,那不会神奇地给你一个有效的实例。在强制展开之前,您需要检查它是否不是nil。这是非常基本的东西,我认为你至少应该阅读 Swift 书:itunes.apple.com/jp/book/swift-programming-language/… -
在您的特定情况下,
NSBundle...很可能会返回nil:例如,您指定了要读取的不存在文件的路径。
标签: sprite-kit swift2 ios9 optional skemitternode