我正在开发一个游戏,它有50个关卡。我想在完成每个关卡之后解锁每个关卡。现在,我设置了50个SKSpriteNodes
标记为1到50的数字,因此它们是编号级别。我希望NSUserDefaults告诉级别选择屏幕,级别完成后用户已解锁新级别。(即,如果用户完成了2级,则解锁3级)。我正在尝试遵循有关如何在NSUserDefaults中保存NSMutablearray的问题的解决方案,但是它对我没有用,因为我不确定如何NSMutableArray
在级别选择菜单和当前级别本身中都具有该功能。
这是我尝试过的一些代码:
[[NSUserDefaults standardUserDefaults] setObject:levelAchieved forKey:@"level2"];
[[NSUserDefaults standardUserDefaults] synchronize];
当用户完成1级课程时,我使用了此功能
然后,我尝试调用此命令:
NSMutableArray *levelAchieved = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"level2"] mutableCopy];
告知级别选择场景用户已达到新级别,并在该场景上将其解锁。
但这是行不通的,因为即使我确保导入了带有in的头文件,也无法在两个场景中都使用该数组NSMutableArray *levelAchieved
。
如何正确添加到数组,但是->这是处理此类问题的正确方法吗?有没有其他方法可以解锁2个场景之间的一系列关卡?
NSUserDefaults
这是一种持久保存信息并跨多个类访问信息的有效方法,因此从该角度来看,您的技术没有任何问题。
我要看的是需要存储50个不同的值。如果只能按顺序解锁级别-即您必须先完成所有1-39级,然后才能尝试40级,那么您所需要做的就是存储一个代表最高完成级别的NSInteger。
例如,当您完成38级时,您会做类似的事情
NSInteger highLevel=38;
[[NSUserDefaults standardUserDefaults] setInteger:highLevel forKey:@"highLevel"];
您的应用程序首次运行时,需要将NSUserDefault值设置为0。
没有看到您的代码,我无法准确地给您下一点,但这将是这样的:
NSInteger highLevel=[[NSUserDefaults standardUserDefaults] integerForKey:@"highLevel"];
for (int i=0;i<NUMBEROFLEVELS;i++)
{
if (i<=highLevel) {
// TODO Display unlocked level button
}
else {
// TODO Display locked level button
}
}
请注意,将highLevel设置为0实际上会解锁级别1,因为数组的第一个元素实际上将为0。当highLevel为1时,元素0和1(级别1和2)将被解锁,依此类推...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句