Хранение переменных в файлах списка свойств Cocos2d - PullRequest
0 голосов
/ 28 января 2012

Я программирую игру cocos2d, в которой в большинстве игр вы должны пройти уровень, предшествующий предыдущему, чтобы перейти на следующий уровень.Каждый уровень находится в отдельном слое (узле).Я хотел сохранить целые числа (1-20) в списке свойств, чтобы переменные сохранялись на протяжении всей игры.И да, я искал в Интернете около часа и не могу ничего найти.

Я нашел код для хранения переменных, но я не знаю, как его правильно использовать.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentPath = [paths objectAtIndex:0];
    NSString *path = [documentPath stringByAppendingPathComponent:@"levelscompleted.save"];


    NSMutableDictionary* myDict = [[NSMutableDictionary alloc] init];


    myDict = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
    NSString *nssLevelsCompleted = [myDict objectForKey:@"LevelsCompleted"];
    LevelsCompleted = [nssLevelsCompleted intValue];

    LevelsCompleted = 445;


    [myDict setObject:nssLevelsCompleted forKey:@"LevelsCompleted"];



    [NSKeyedArchiver archiveRootObject:myDict toFile:path];

1 Ответ

0 голосов
/ 28 января 2012

Вот пример кода для получения идеи (использует ARC для управления памятью):

- (NSString*) filePath {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *filePath = [NSString stringWithFormat:@"%@/%@",documentsDirectory,@"myfile.plist"];
    return filePath;
}

- (void)writeScoreToPlist:(NSInteger)score level:(NSString*)level {
    NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:[self filePath]];    
    if(plistDict==nil){
        plistDict = [[NSMutableDictionary alloc] init];    
    }
    [plistDict setObject:[NSNumber numberWithInteger:score] forKey:level];
    [plistDict writeToFile:[self filePath] atomically: YES];
}

- (NSInteger)readScoreFromPlist:(NSString*)level {
    NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:[self filePath]];
    NSNumber *value = [plistDict objectForKey:level];
    return value.integerValue;
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.

    [self writeScoreToPlist:999 level:@"Level1Highscore"];
    NSInteger score = [self readScoreFromPlist:@"Level1Highscore"];
    NSLog(@"Achieved score for level 1: %d",score);

    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

Выход:

2012-01-29 16:24:30.844 plistTest[23531:f803] Achieved score for level 1: 999
...