我有一个粒子,我通过UIViewController
添加到SKScene
。以下是我的SKScene
代码:
class MyScene : SKScene {
private var emitterNode: SKEmitterNode?
deinit {
emitterNode?.removeAllActions()
emitterNode?.removeFromParent()
self.removeAllChildren()
}
override init(size: CGSize) {
super.init(size: size)
self.backgroundColor = UIColor.whiteColor()
let emitterPath = NSBundle.mainBundle().pathForResource("MyParticle", ofType: "sks")
emitterNode = NSKeyedUnarchiver.unarchiveObjectWithFile(emitterPath!) as? SKEmitterNode
emitterNode!.name = "myParticle"
emitterNode!.targetNode = self.scene
emitterNode!.position = CGPointMake(self.frame.size.width/2, 15)
self.addChild(emitterNode!)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
我对SKScene
了解不多,但我在deinit
内的emitterNode?.removeFromParent()
上发生了罕见错误。我的代码是否正确?
答案 0 :(得分:0)
您的问题是您正在过度移动节点。 Deinit删除您的emitterNode的父级并找到您的请求但是没有对该节点的其他强引用,因此这会导致崩溃。
删除deinit {}方法,没有必要。请记住,在 Swift ARC 中,您不需要使用此方法, ARC 将为您释放并释放内存。< / p>
希望这可以帮到你。