我有一个显示分数的场景。有多个级别,每个级别都有一个不同的场景。
我试图以此来了解哪个场景称为得分场景:

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

将该BOOL值从该场景转移到使用NSUserDefaults调用的场景。

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

但这似乎无法正常工作。
我有一个if语句,其中检查不同BOOL的值中的哪个为YES(因为仅应调用该场景的那个,对吗?因为没有其他场景被调用,因此它们各自的BOOL的值是设置为否?),然后运行该特定代码以显示得分和最高得分,如下所示:

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”场景中调用得分场景,那么代码应该跳过namedByMED吧?
但是,事实并非如此。即使我已被E调用,它也会执行namedByMED中的代码所说的内容并跳过namedByE。

我在这里想念什么?

最佳答案

一系列的BOOL是笨拙的方式来表示单个属性,该属性有时只能是一件事。更好的表示形式是单个枚举或一个字符串,该枚举或字符串可以保存表示当前场景的内容。 SKNode有一个userData字典。您可以在其中使用一个键:

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

在比分场景中:
if ([scene.userData[@"fromScene"] isEqualToString:@"levelTwo"]) {}

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

关于ios - 我如何知道哪个场景称为特定场景?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28918308/

10-17 02:16