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