1

我有一个子类,SKNode我希望在将它们添加到场景时收到通知。知道SKNode有一个名为 的属性scene,我尝试使用 KVO,但由于某种原因它不起作用。

- (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 运作良好,但我在这里做错了什么?

4

2 回答 2

1

我对此的解决方案是有一个方法来添加节点和 SKNode 的通用子类,我所有的节点都基于该子类。该子类具有“-(void)onEnterScene”,它在将其添加到场景后由 add'er 方法调用。

于 2014-03-14T12:32:23.513 回答
0

在您的子类中覆盖此函数SKScene

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

已经在这里回答了

于 2014-08-31T21:54:33.177 回答