Трудно понять ваш код, пожалуйста, посмотрите на этот небольшой пример ниже.
Хорошо, это сохранение нового счета, при условии, что у вас есть синглтон GameController, где объявлен изменяемый массив scores
, а currentScore
в этом синглтоне также отображает счет текущего игрока.
-(void) saveScores {
GameController * controller = [GameController sharedController];
for(int i=0; i<5;i++)
{
if([[[controller.scores objectAtIndex:i] objectForKey:@"score"] intValue] == controller.finalscore)
{
break;
}
if([[[controller.scores objectAtIndex:i] objectForKey:@"score"] intValue] < controller.finalscore) {
for(int j=5;j>i+1;j--)
{
[controller.scores replaceObjectAtIndex:j-1 withObject:[controller.scores objectAtIndex:j-2]];
}
NSMutableDictionary *newEntry = [NSMutableDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:controller.finalscore],@"score",@"Local player",@"name", nil];
[controller.scores replaceObjectAtIndex:i withObject:newEntry];
break;
}
}
controller.currentScore=0;
[[NSUserDefaults standardUserDefaults] setObject:controller.scores forKey:@"OurScores"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
Вы видите, что мы сохраняем обновленные результаты в NSUserDefaults. Итак, в начале игры мы должны их загрузить. Я добавил этот код в метод инициализации GameController:
- (void) loadScores {
if([[NSUserDefaults standardUserDefaults] objectForKey:@"OurScores"] == nil)
{
NSMutableDictionary *empty = [NSMutableDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:0],@"score",@"empty",@"name", nil];
for(int i=0;i<5;i++)
[scores addObject:empty];
}
else
{
NSLog(@"Loading scores");
scores = [[NSUserDefaults standardUserDefaults] objectForKey:@"OurScores"];
}
}
И вот как мы можем показать эти результаты, используя cocos2d:
-(void) drawScores {
for(int i=0; i<5; i++)
{
CCLabelTTF* score = [CCLabelTTF labelWithString:
[NSString stringWithFormat:@"%@",[[controller.scores objectAtIndex:i] objectForKey:@"name"]] fontName:@"Marker Felt" fontSize:30];
score.anchorPoint=ccp(0,0);
score.position = ccp(115, 180-i*35);
CCLabelTTF* score2 = [CCLabelTTF labelWithString:
[NSString stringWithFormat:@"%d",[[[controller.scores objectAtIndex:i] objectForKey:@"score"] intValue] ] fontName:@"Marker Felt" fontSize:35];
score2.anchorPoint=ccp(0,0);
score2.position = ccp(280, 180-i*35);
score.color=currentClr;
score2.color=currentClr;
[self addChild: score z:3 tag:i];
[self addChild: score2 z:3 tag:i+15];
}
}