当转换到新场景时,(我正在为新场景调用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两次,这会耗尽内存并且很麻烦。 任何反馈意见。
答案 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之类的内容以及任何其他基本项目,例如得分,生命等。