1

在此代码上工作了几个小时但没有成功,请建议:

我正在构建一个 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)

没有任何成功。 你怎么能解开SKEmitterNode?是sks文件里的东西吗? 在此处输入图像描述 非常感谢您的帮助!!!!

4

1 回答 1

1

NSKeyedUnarchiver.unarchiveObjectWithFile()正在抛出异常,因为它需要一个非nil字符串(类型:)String作为参数,并且您正在传递一个可选字符串(即 type String?)并在它恰好包含时强制展开它nil(“根本没有值”)而不是一个有效值。

这似乎正在发生,因为较早的调用NSBundle.mainBundle().pathForResource(_:, ofType:)必须失败(在您的资源中找不到路径。即,所述文件不存在)。

在您的特定情况下,此代码应该可以工作:

let optionalFireEmitter = NSBundle.mainBundle().pathForResource("FireParticles", ofType: "sks")

if let unWrappedFireEmitter = optionalFireEmitter {
    // you can use your unWrappedFireEmitter, no need to append "!"
    // (it is already unwrapped)

    // (...your code here...)
}
else{
    // NSBundle.mainBundle().pathForResource() returned nil: Can't use.
    // Make sure the file name and extension you specified are correct
    // and that the resource file is included in your binary.
}
于 2015-09-17T09:48:31.663 回答