我正在尝试按照以下方式做些事情:
class MyCGPoint: CGPoint {
override public x: CGFloat {
willSet {
}
}
}
自然地,我发现类不能扩展Structs,所以我不确定如何将willSet方法附加到CGPoint中已经存在的x变量上
我愿意接受这种方法的替代方案。我尝试这样做的原因是,我可以在该willSet方法中添加一个断点,并确定是什么导致我的SKSpriteNode的位置发生变化(即使物理体速度为0)
请参阅SKPhysicsBody moving even when velocity is 0,以了解我正在尝试使用此技术诊断的问题。
答案 0 :(得分:0)
您不需要继承struct(Swift不允许您这样做)。只需创建具有相同签名的自己的Point,以及一种从Point转换为CGPoint
的方法。然后用新的Point替换实现中的CGPoint
struct MyPoint {
var x: CGFloat {
willSet {
}
}
var y: CGFloat
var cgPoint: CGPoint { CGPoint(x: x, y: y) }
}
答案 1 :(得分:0)
由于您需要进行调试,因此可以use a watchpoint,-[SKSpriteNode setPosition:]
上的符号断点(尽管我没有对此进行测试),甚至可以SKSpriteNode
上的扩展名为:
extension SKSpriteNode {
open override var position: CGPoint {
willSet {
print("Position of \(self) will change to: \(newValue)")
// Breakpoint here
}
}
}