检测节点的父节点何时更改

时间:2016-07-01 04:14:11

标签: ios swift sprite-kit

所以我有一个类是SKSpriteNode的子类,我想让它在父改变时被警告,或者如果它没有父节点就被提醒,以便我知道它的容器的大小。我尝试了以下操作:

class MyNode: SKSpriteNode {

    override var parent: SKNode? {
        didSet {

            //code here

        }
    }

    override var scene: SKScene? {
        didSet {

            //code here

        }
    }

}

但是,我收到错误Cannot observe read-only property 'parent'; it can't changeCannot observe read-only property 'scene'; it can't change,这让我相信某处存在私有值并且会计算这些属性。除了每次将节点添加到其他地方时手动调用函数,我不知道还能做什么,但我觉得这是一个难看的解决方案。感谢您的帮助,如果解决方案很明显,那就很抱歉;我对SpriteKit很新。

2 个答案:

答案 0 :(得分:1)

您正在为检测设置类属性,我认为在初始化类时您不会允许更改。我建议检查一个游戏循环函数,如didFinishUpdate。然后,您将能够检查每一帧并执行正确的操作。

答案 1 :(得分:1)

我所做的是为SKScene制作扩展程序:

import Foundation
import SpriteKit

extension SKScene {

    override public func addChild(node: SKNode) {

        super.addChild(node)

        if let myNode = node as? MyNode {

            myNode.containerSize = self.size

        }

    }

}

SKSpriteNode

import Foundation
import SpriteKit

extension SKSpriteNode {

    override public func addChild(node: SKNode) {

        super.addChild(node)

        if let myNode = node as? MyNode {

            myNode.containerSize = self.size

        }

    }

}