通过SKTransistion问题传递水平

时间:2014-12-01 22:51:57

标签: initialization sprite-kit sktransition

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

问题是在第一次创建实例时,在我可以设置level属性之前调用initWithSize,并且我只能在创建实例后设置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两次,这会耗尽内存并且很麻烦。 任何反馈意见。

1 个答案:

答案 0 :(得分:1)

您希望将游戏状态与场景分离。创建一个类似GameState的类(添加前缀是合适的)。你有2个选择。您可以创建游戏状态的全局实例,也可以创建单身人员来访问游戏状态。

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

@interface GameState : NSObject

@property (nonatomic, assign) NSInteger currentLevel;

// Add other properties here

+ (instancetype)sharedInstance;

@end

然后您可以使用以下内容加载级别:

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

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