【发布时间】:2019-08-25 21:15:08
【问题描述】:
我正在召唤我在 .sks 文件中创建的粒子。大多数时候,粒子被很好地召唤,但有时(比如 400 个中的一个)我有一个致命的错误。
这是用于召唤粒子的代码:
func createParticle(touchLocation : CGPoint) {
let particles = SKEmitterNode(fileNamed: "MyParticle.sks")!
let touch = CGPoint(x: touchLocation.x, y: self.view!.frame.height - touchLocation.y)
particles.position = touch
particles.zPosition = 1
addChild(particles)
particles.run(SKAction.sequence([SKAction.wait(forDuration: 3.0), SKAction.removeFromParent()]))
}
当出现致命错误时,它在这一行:
let particles = SKEmitterNode(fileNamed: "MyParticle.sks")!
它显示“致命错误:在展开可选值时意外发现 nil”。可能是因为他没有找到该文件,但真正的问题是 WHY 他没有找到该文件,而大部分时间他都找到了它...注意:此脚本在检测到触摸。
我试过这个:
func createParticle(touchLocation : CGPoint) {
for _ in 0...100 {
let particles = SKEmitterNode(fileNamed: "MyParticle.sks")!
let touch = CGPoint(x: touchLocation.x, y: self.view!.frame.height - touchLocation.y)
particles.position = touch
particles.zPosition = 1
addChild(particles)
particles.run(SKAction.sequence([SKAction.wait(forDuration: 3.0), SKAction.removeFromParent()]))
}
}
我将整个脚本执行了大约 100 次以测试是否会出现致命错误,但它没有发生......
【问题讨论】:
-
您犯了两个基本错误。 (1) 在 for 循环中访问完全相同的文件 100 次。 (2) 强制展开可选值。
-
哦,是的,我为什么没有想到...然后解决方案是执行以下操作:guard letparticles = SKEmitterNode(fileNamed: "MyParticle.sks") { else return }那么当出现错误并且程序找不到文件时,它就不会创建任何粒子......谢谢!
-
不要使用扩展
标签: swift sprite-kit runtime-error particles