Ios 阶段结束时维持奖金

Ios 阶段结束时维持奖金,ios,sprite-kit,Ios,Sprite Kit,我正在做一个简单的游戏,你从三个“特殊技能”开始。当你点击按钮,你有两个左等,直到你没有。然而,当我进入一个新的阶段时,我又回到了3。这是错误的,我想保持与第一阶段相同的“技能” 我知道这是因为下面的代码。我正在初始化initWithSize中的“powers”,每次加载舞台时都会调用它 -(id)initWithSize:(CGSize)size level:(int)level { if (self = [super initWithSize:size]) { power1=

我正在做一个简单的游戏,你从三个“特殊技能”开始。当你点击按钮,你有两个左等,直到你没有。然而,当我进入一个新的阶段时,我又回到了3。这是错误的,我想保持与第一阶段相同的“技能”

我知道这是因为下面的代码。我正在初始化initWithSize中的“powers”,每次加载舞台时都会调用它

 -(id)initWithSize:(CGSize)size level:(int)level {
  if (self = [super initWithSize:size]) {

    power1=33;
    power2=3;
    power3=3;

    NSDictionary *config=[NSDictionary dictionaryWithContentsOfFile:
                          [[NSBundle mainBundle]pathForResource:
                           @"Levels" ofType:@"plist"]];
我把代码编辑成这样。 因此,如果是第0阶段,我的力量将初始化为我的状态,当我移动到第1阶段时,它将继续。 然而,当我进入第一阶段时,我的能力是空白/零,因为我不确定如果我不在第零阶段/空白,我的if条件应该是什么

-(id)initWithSize:(CGSize)size level:(int)level {
  if (self = [super initWithSize:size]) {

 //   power1=33;
//    power2=3;
//   power3=3;

    NSDictionary *config=[NSDictionary dictionaryWithContentsOfFile:
                          [[NSBundle mainBundle]pathForResource:
                           @"Levels" ofType:@"plist"]];

    if (level==0) {
      power1=33;
      power2=3;
      power3=3;

    }

    _level=level;
比赛获胜

 GameLevelScene *newScene = [[GameLevelScene alloc] initWithSize:self.size
                                            level:_level+1];

有几种方法可以做到这一点。我不知道您的完整代码,因此我认为在您的情况下,使用
NSUserDefaults
可能是最安全的选择

在一个关卡结束时,在进入下一关卡之前,将玩家属性写入
NSUserDefaults
,如下所示:

NSString *valueToSave = [NSString stringWithFormat:@"%i",someIntValue];
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"Power1"];
[[NSUserDefaults standardUserDefaults]synchronize];
NSString *savedValue = [[NSUserDefaults standardUserDefaults] stringForKey:@"Power1"];
if(!savedValue)
{
    NSLog(@"no value saved");
} else {
    long someIntValue = [savedValue integerValue];
}
然后,在下一个级别的开始处,您可以像这样读回保存的值:

NSString *valueToSave = [NSString stringWithFormat:@"%i",someIntValue];
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"Power1"];
[[NSUserDefaults standardUserDefaults]synchronize];
NSString *savedValue = [[NSUserDefaults standardUserDefaults] stringForKey:@"Power1"];
if(!savedValue)
{
    NSLog(@"no value saved");
} else {
    long someIntValue = [savedValue integerValue];
}

如果您对NSUserDefaults有些不熟悉,您应该阅读。

更高级别的代码(调用
initWithSize
)需要跟踪哪些技能可用。@user3386109我在调用下一阶段的地方添加了。我必须将“技能”也添加到initwithsize中吗?我的意思是,将它们作为参数传递给level,就像我在level中传递一样。您可以将技能作为参数添加到
initwithsize
,但在某个级别上使用技能时,您还需要一种机制来更新技能。因此,更好的解决方案可能是定义一个协议,允许GameLevelScene根据需要查询和更新技能。@user3386109我在TTooches中有一个方法,因此当我触摸电源按钮时,它会从我的“电源量”中减去一。当我得到太零时,它不能被使用。这就足够了,或者我需要更多的完美作品,再次感谢你的帮助。但是你能建议一个更好的地方来初始化我的能力吗。它保持了我从第一阶段到其他阶段的能力,但当我进入第0阶段(或第1阶段)时,我又回到了第34阶段。我不希望我的球员在第0阶段比赛时获得完全的力量,但我也需要第0阶段设置力量,以防他们从不比赛before@Jennifer-设置玩家属性的最佳位置是init方法或从init方法调用的另一个方法。它真的不在乎你在哪里或什么时候做,只要它发生在实际游戏开始之前。如果保存并读取NSUserDefaults,则值将始终是您期望的值。效果比预期的好。甚至在我退出游戏时也保留了价值。