我正确地去除了SKScene吗?

时间:2016-07-11 10:15:50

标签: ios swift skscene

我有一个粒子,我通过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()上发生了罕见错误。我的代码是否正确?

1 个答案:

答案 0 :(得分:0)

您的问题是您正在过度移动节点。 Deinit删除您的emitterNode的父级并找到您的请求但是没有对该节点的其他强引用,因此这会导致崩溃。

删除deinit {}方法,没有必要。请记住,在 Swift ARC 中,您不需要使用此方法, ARC 将为您释放并释放内存。< / p>

希望这可以帮到你。