我正在使用cocos2d-iphone制作游戏,并希望制作一个以前最佳分数的屏幕。我有两个场景。在MainScene
我创建了一个用于存储分数的全局变量,这在游戏中显然正在发生变化;一个可变数组和一个简单数组,它们将是可变数组的重复数组:
NSInteger _scoreValue;
NSMutableArray *_scoresMutable;
NSArray *_scores;
在同一个班级中,当游戏结束时,我会在可变数组中添加新分数,制作静态副本并将其保存在NSUserDefaults
中:
[_scoresMutable addObject:@(_scoreValue)];
_scores=[NSArray arrayWithArray:_scoresMutable];
[[NSUserDefaults standardUserDefaults] setObject:_scores forKey:@"gameScores"];
然后,在其他类别的场景中,得分称为bestscores
(我不知道怎么样更好,但我更容易制作一个新场景,因为我使用的是SpriteBuilder)我导入{ {1}}以防万一并制作标签。
目前我正试图从MainScene.h
获得所有分数,对其进行排序并显示第二大价值。但它始终显示0(标签默认为空)。那么,如何做到这一点呢?
NSUserDefaults
编辑:- (void)didLoadFromCCB {
NSSet *numberSet = [NSSet setWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"gameScores"]];
NSArray *sortedNumbers = [[numberSet allObjects] sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"self" ascending:NO] ]];
NSNumber *secondHighest;
if ([sortedNumbers count] > 1){
secondHighest = sortedNumbers[1];
}
[_secondBiggestLabel setString:[NSString stringWithFormat:@"%ld",(long)secondHighest]];
}
`
没有帮助。也许我需要写一些其他内容才能从另一个类访问synchronize
?
答案 0 :(得分:1)
设置对象时,必须通过调用同步来跟随它。这实际上会保存它。
[[NSUserDefaults standardUserDefaults] synchronize];
答案 1 :(得分:0)
你确定你已经初步化了'_scoresMutable'数组吗?
此外,如果以下部分中的代码是在单独的启动上运行,而不是在运行第一部分代码时运行,则可能在默认值写入磁盘之前终止应用程序。在NSUserDefaults实例上调用'synchronize'来修复它。