2014-03-13 20 views
1

我有一個SKNode的子類,當我想將它們添加到場景時得到通知。 知道SKNode有一個名爲scene的屬性,我試圖使用KVO,但由於某種原因,它不起作用。sprite套件 - 當節點被添加到場景時得到通知

- (id)init 
{ 
    self = [super init]; 
    if (self) 
    { 
     [self addObserver:self forKeyPath:@"scene" options:NSKeyValueObservingOptionNew context:nil]; 
    } 
    return self; 
} 

- (void)dealloc 
{ 
    [self removeObserver:self forKeyPath:@"scene"]; 
} 

+ (instancetype)gameWorld 
{ 
    return [[self alloc] init]; 
} 

#pragma mark - Observer methods 

// never called 
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{ 
    if (object == self && [keyPath isEqualToString:@"scene"]) 
    { 
     KKScene *scene = change[NSKeyValueChangeNewKey]; 
     NSLog(@"%@", scene); 
    } 
} 

是否有節點已添加到場景時得到通知?或者KVO運作良好,但我在這裏做錯了什麼?

+0

可能重複[SKSpriteNode,加入/退出父勾去掉(http://stackoverflow.com/questions/ 19648578/skspritenode-added-to-removed-from-parent-hook) – LearnCocos2D

+0

因爲我明白了。僅當場景是節點的直接父節點時才設置「場景」屬性。我甚至認爲即使subchilds會有場景設置 – Yaman

+0

您可以觀察節點的父屬性,而不是場景屬性。 – ZeMoon

回答

1

我對此的解決方案是增加節點和SKNode的一般子類,在該節點上創建我的所有節點。這個子類具有「 - (void)onEnterScene」,在添加到場景之後,它由add'er方法調用。

0

超越此功能在您的SKScene子類:

-(void)addChild:(SKNode *)node { 
    [super addChild:node]; 
    NSLog(@"added child"); 
} 

已經回答here

相關問題