设置:
我正在子类化SKSpriteNode()
以创建一个名为SubNode()
.
SKSPriteNode() 类有一个称为physicsBody
存储SKPhysicsBody()
对象的属性。SKPhysicsBody
有一个叫做“速度”的属性,它是CGVector()
目标:
在我的子类中,我希望有一个始终保留前一个的变量CGVector()
。例如,只要我打电话subNode.physicsBody?.velocity = CGVector(dx: 10, dy: 10)
的意思。subNode.previousVelocity
应设置为以前的subNode.physicsBody?.velocity
值。
问题
如果velocity
只是超类的继承属性,我可以只是override
该属性并附加一个didSet
观察者。但是,因为velocity
它是的一个属性,SKPhysicsBody()
并且 SKPhysicsBody()
当它的一个属性发生变化时,对象不会改变,didSet
所以不会被触发,我无法听到它的变化。
如果我的解释不清楚,请要求更多澄清。
我的子类:
class SubNode: SKSpriteNode {
var previousVelocity: CGVector = .zero
// This doesn't get triggered because the physiceBody object doesn't change when one of its properties changes.
override var physicsBody: SKPhysicsBody? {
didSet {
previousVelocity = oldValue?.velocity
}
}
// If velocity would be a property of the superclass, this would trigger.
override var velocity: CGVector {
didSet {
previousVelocity = oldValue
}
}
}
从 SubNode() 子类创建对象 subNode,设置物理体,然后设置速度"
let subNode = SubNode()
subNode.physicsBody = SKPhysicsBody()
subNode.physicsBody?.velocity = CGVector(dx: 10, dy: 10)
subNode.physicsBody?.velocity = CGVector(dx: 0, dy: 0)
//should be true: subnode.previousVelocity == CGVector(dx: 10, dy: 10)