2016-01-08 28 views
1

我有一个用作数据容器的Polygon类,但出于调试目的,我想通过将它们作为子节点添加到SKNode来绘制多边形。当我这样做时,我想让Polygon对象为它自己添加边界精灵子元素。由于性能的原因,我只想在多边形作为子节点添加到另一个节点时添加这些精灵。当SKNode被添加为子时检测

有没有什么方法可以让Polygon对象本身检测到它已被添加到场景中,还是我需要通过在场景中添加一个额外的createSprites电话来告诉它?

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

回答

1

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

你可以在自定义SKNode子类的parent财产观察变化,就像这样:

class MyNode : SKNode { 

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

编辑:就像我在评论中提到,在Objective-C(在那里你可以不使用财产观察员),您可以改为使用键值观察(KVO),并观察SKNodeparent属性中的更改:

实际代码:

- (instancetype) init 
{ 
    if (self = [super init]){ 
     // REGISTER for KVO 
     [self addObserver:self 
       forKeyPath:@"parent" 
        options:NSKeyValueObservingOptionNew 
        context:NULL]; 
    } 

    return self; 
} 

- (void) dealloc 
{ 
    // UNREGISTER from KVO 
    [self removeObserver:self forKeyPath:@"parent" context:NULL]; 
} 

// Method that is called when any keyPath you subscribed to is modified 
- (void)observeValueForKeyPath:(NSString *)keyPath 
        ofObject:(id)object 
        change:(NSDictionary *)change 
        context:(void *)context 
{ 
    // (Check keypath in case you are observing several different 
    // properties. Otherwise, remove if statement:) 

    if ([keyPath isEqualToString:@"parent"]) { 

     // parent node changed; do something 
    } 
} 
+2

感谢。我有点含糊。我的问题涉及objective-c。我不认为我想扩展这些基类。我正在寻找内置的东西,但也许没有这样的解决方案。 –

+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:

相关问题