0

在过渡到新场景时(我正在为新场景调用 self 的实例),我试图将级别编号设置为新实例的属性。

问题是当第一次创建实例时 initWithSize 在我可以设置 level 属性之前被调用,并且我只能在实例创建之后设置 level 属性,因此在第一次调用 initWithSize 时属性级别总是设置为默认值(0)。

 MyScene *destinationScene = [[MyScene alloc]init];

    destinationScene.currentLevel = (int) level;

    NSLog(@"519 Level Passed: %d New Level: %d", (int)level, destinationScene.currentLevel);

    SKTransition *transtition = [SKTransition doorwayWithDuration:2];
    [self.view presentScene:destinationScene transition:transtition];

InitWithSize:在此处检查级别编号并加载

 _currentLevel = self.currentLevel;

        // check if no level ie loading game first  time
        if (_currentLevel==0) {
            _currentLevel=1;
        }

        [self loadLevel:_currentLevel];

我发现的唯一方法是调用 initWithSize 两次,这会耗尽内存并且很混乱。任何反馈表示赞赏。

4

1 回答 1

1

您希望将游戏状态与场景分离。创建一个类似 GameState 的类(添加前缀为宜)。您在这里有 2 个选择。您可以创建游戏状态的全局实例,也可以创建单例来访问游戏状态。

像这样的东西(这有一个定义的单例类方法):

@interface GameState : NSObject

@property (nonatomic, assign) NSInteger currentLevel;

// Add other properties here

+ (instancetype)sharedInstance;

@end

然后,您可以稍后使用以下内容加载关卡:

[newScene loadLevel:[GameState sharedInstance].currentLevel];

这样做的好处是您现在可以从一个常见实例中访问诸如 currentLevel 之类的内容以及任何其他基本项目(例如分数、生命等)。

于 2014-12-02T06:17:32.123 回答