SceneKit叠加SKScene在收到通知时没有孩子?

时间:2015-08-07 04:25:55

标签: ios sprite-kit scenekit

在我看来,这似乎是一个巨大的故障。

我有一个覆盖SceneKit场景的SKScene。在我的应用程序中,调用一个方法来更新“进度条”的进度(实际上只是一个高度非常低的SKShapeNode)。此方法称为updateSaveDataNotification,并采用NSNotification。我打电话给[self childNodeWithName:]来访问子节点。 问题是,当它被调用时,self没有孩子。即使它真的有三个孩子。

我正在更改我的代码,因此它们是实现中的变量,因此我可以通过这种方式设置其缩放,但为什么这种行为甚至会存在?为什么self在这种情况下会有零个孩子?

编辑:进度条只是SKShapeNode。这是我使用的代码:

@implementation {
    SKShapeNode *progressBar;
    float progress;
}
…
-(void)load {
    [[NSNotificationCenter defaultCenter] addObserver:self name:@"anyName" selector:@selector(rcvNotification:) object:nil];
    progress = 0.0;
    …
    progressBar = [SKShapeNode shapeNodeWithRectOfSize:CGSizeMake(self.size.width * 0.9, 2)
    progressBar.xScale = 0;
    progressBar.alpha = 0;
    progressBar.fillColor = [UIColor whiteColor];
    progressBar.strokeColor = [UIColor whiteColor];
    progressBar.position = CGPointMake(self.size.width / 2, self.size.height * 0.1);
    progressBar.name = @"progressBar";

    …

    [self addChild:progressBar]

    [progressBar runAction:[SKAction fadeAlphaTo:1 duration:1]];

}

// The notification has one KVP in its user info dictionary. This is "someKey."
// "someKey"'s float value is added to "progress."

-(void)rcvNotification:(NSNotification*)notification {
    progress += [[notification.userData valueForKey:@"someKey"] floatValue];
    // [self updateUI];
    // note: if I call updateUI like that, self will have zero children regardless of whether or not it actually has more.
    // a remedy:
    [self runAction:[SKAction waitForDuration:0] completion:^{
        [self updateUI];
    }];
}

-(void)updateUI {
    NSLog(@"count of children: %lu", self.children.count);
    [progressBar runAction:[SKAction scaleXTo:progress duration:0.5] completion:
        // code to run when finished animating change
        // also logic for reaching 100% progress.
    }];
}

我的困境是,在一个稳定的时刻,无法重新调整进度条。我发现self暂时有0个孩子,所以我让它运行0秒动画。我想弄清楚为什么会发生这种奇怪的行为。

0 个答案:

没有答案