我有一个粒子要通过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将为您取消初始化并释放内存。

希望这可以帮到你。

10-08 06:28