gpt4 book ai didi

ios - 如何使用 NSUserDefaults 将项目添加到 NSMutableArray

转载 作者:行者123 更新时间:2023-11-29 03:00:12 24 4
gpt4 key购买 nike

我正在开发一款游戏,它有 50 个关卡。我想在完成之前的关卡后解锁每个关卡。现在我设置了 50 个标记为 1 到 50 的 SKSpriteNodes,因此它们是编号级别。我希望 NSUserDefaults 告诉关卡选择屏幕用户在关卡完成后解锁了一个新关卡。 (即如果用户完成第 2 级,解锁第 3 级)。我试图按照这个问题的解决方案 How to save NSMutablearray in NSUserDefaults但它对我不起作用,因为我不确定如何在关卡选择菜单和当前关卡本身中使用 NSMutableArray

这是我试过的代码:

[[NSUserDefaults standardUserDefaults] setObject:levelAchieved forKey:@"level2"];
[[NSUserDefaults standardUserDefaults] synchronize];

我在用户完成第 1 级时使用了它

然后我试着调用这个:

NSMutableArray *levelAchieved = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"level2"] mutableCopy];

告诉关卡选择场景用户已经达到了新的关卡,并在该场景解锁。

但这没有用,因为我无法在两个场景中都使用数组,即使我确保导入了包含 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)将解锁,依此类推...

关于ios - 如何使用 NSUserDefaults 将项目添加到 NSMutableArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23401582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com