我有一个粒子要通过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()
行上发生了一个罕见的错误。我的代码正确吗? 最佳答案
您的问题是您要卸下节点。 Deinit删除了您的端节点的父节点并找到您的请求,但是没有对该节点的其他强引用,因此会导致崩溃。
删除deinit {}方法,没有必要。请记住,在带有ARC的Swift中,您不需要使用此方法,ARC将为您取消初始化并释放内存。
希望这可以帮到你。