繁体   English   中英

Sprite Kit-将节点添加到场景时获得通知

[英]sprite kit - Get notified when a node have been added to a scene

我有一个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运作良好,但我在这里做错了?

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

在您的SKScene子类中重写此函数:

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

已经在这里回答

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM