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