检测SKNode作为子项添加的时间

时间:2016-01-08 10:34:41

标签: objective-c sprite-kit

我有一个用作数据容器的Polygon类,但出于调试目的,我想通过将多边形作为子项添加到SKNode来绘制多边形。当我这样做时,我希望Polygon对象将边框精灵子项添加到自身。由于性能原因,我只想在将Polygon作为子节点添加到另一个节点时添加这些精灵。

Polygon对象本身是否有任何方法可以检测到它已被添加到场景中,或者我是否需要通过在将场景添加到场景后进行额外的createSprites调用来告诉它?

我想我可以轮询父属性,但我正在寻找事件驱动的东西。

2 个答案:

答案 0 :(得分:1)

在Swift中,您可以为您继承的类的属性定义属性观察者

您可以观察自定义SKNode子类的parent属性中的更改,如下所示:

class MyNode : SKNode {

    override var parent: SKNode? {
        didSet {
             // parent node changed; do something
        }
    }
}

编辑:就像我在评论中提到的,在Objective-C(您不能使用属性观察者)中,您可以改为使用键值观察(KVO),并观察{{{ 1}} SKNode属性:

实际代码:

parent

答案 1 :(得分:1)

在Objective-C中你可以这样做:

[node addObserver:self forKeyPath:@"parent" options:NSKeyValueChangeOldKey context:nil];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    //logic here
}

或者在这种情况下只是子类SKNode并覆盖setParent: