我如何知道哪个场景调用了特定场景?

时间:2015-03-07 18:15:03

标签: ios objective-c sprite-kit

我有一个显示分数的场景。有多个级别,每个级别都有不同的场景 我试着知道哪个场景称为得分场景:

为每个场景创建一个BOOL,并在各自的didMoveToView中将它们设置为YES。

使用NSUserDefaults将该场景中的BOOL值传输到正在调用的场景。

使用if语句检查哪一个是YES。

但这似乎没有像预期的那样奏效 我有一个if语句,它检查哪个不同的BOOL值是YES(因为只有那个场景被调用的那个应该是,对吗?因为没有调用其他场景因此它们各自BOOL的值是设置为NO?)并运行该特定代码以显示分数和高分如下:

if (calledByMED == YES) {
    highScoreLabel.text = [NSString stringWithFormat:@"Best %ld", (long) highScoreMED];

    //[self highScoreLabel];

    NSInteger scoreMED = [prefs integerForKey:@"scoreMED"];

    scoreLabel.text = [NSString stringWithFormat:@"SCORE: %ld",(long) scoreMED];



}

else if (calledByE == YES) {
        highScoreLabel.text = [NSString stringWithFormat:@"Best %ld", (long) highScoreE];

        //[self highScoreLabel];

        NSInteger easyScore =  [prefs integerForKey:@"scoreE"];

        scoreLabel.text = [NSString stringWithFormat:@"%ld",(long) easyScore];



    }

然而,它没有做到应有的效果。假设如果我从“E”场景调用得分场景,代码应该跳过被叫的对话吗? 但是,事实并非如此。它执行了calledByMED中的代码所说的内容,并且即使我已经通过E调用它,也会跳过调用它。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

一系列BOOL是一种笨拙的方式来表示一个单独的属性,而这个属性在时间上只能是一件事。更好的表示是单个枚举或字符串,用于保存表示呈现场景的内容。 SKNode有一个userData字典。你可以在那里使用一个键:

// when presenting a scene:
scene.userData =  [@{ @"fromScene" : @"levelTwo" } mutableCopy];

在得分场景中:

if ([scene.userData[@"fromScene"] isEqualToString:@"levelTwo"]) {}

枚举会更快更简洁,但是您可能想要使用自定义属性,而不是尝试将枚举(基本上是int)包装到字典中。