将分数值保存在一个视图控制器中并显示在另一个视图

时间:2012-12-07 22:32:43

标签: iphone objective-c ios xcode ipad

我正在开发一种使用基本点数系统来射击敌人的游戏,然后将该分数转换为硬币值以在游戏中解锁额外的枪支。因此,当你玩游戏时,你的分数会上升,当你死亡时,屏幕上会显示你的分数,以及你从该游戏获得的硬币数量(目前得分为10)。

我正在寻找获得硬币值的最佳方法并将其显示在另一个屏幕上,枪选择屏幕,第一次玩游戏,然后从一个游戏中获得的硬币将添加到总硬币你有,枪选择屏幕上显示的值。如果这很容易做到,那就是一种加密硬币价值的方法。

这是我目前正在使用的NSUserDefaults,在游戏视图中:

NSUserDefaults *coins = [NSUserDefaults standardUserDefaults];
    NSNumber *myCoins = [NSNumber numberWithInt:_killCount*9.4];
    _myCoinsInt = [myCoins integerValue];
    _totalCoinsInt = _myCoinsInt + _totalCoinsInt;
    [coins setObject:myCoins forKey:@"coins"];
    [coins synchronize];

    NSUserDefaults *totalCoins = [NSUserDefaults standardUserDefaults];
    NSNumber *theTotalCoins = [NSNumber numberWithInt:_totalCoinsInt];
    [totalCoins setObject:theTotalCoins forKey:@"totalCoins"];
    [totalCoins synchronize];
    NSLog(@"%@", theTotalCoins);

在枪选择屏幕中,在viewDidLoad方法下:

NSUserDefaults *totalCoins = [NSUserDefaults standardUserDefaults];
NSInteger _totalCoinsInt = [totalCoins objectForKey:@"totalCoins"];
NSString *intString = [NSString stringWithFormat:@"%d", _totalCoinsInt];
scoreField.text = intString;

3 个答案:

答案 0 :(得分:4)

我认为最简单的方法是以[NSUserDefaults standardUserDefaults]的方式存储硬币数量,你可以像提供的其他答案一样存储,但是你需要保存那些数据你的应用关闭了。

我还会使用您的服务器(如果有的话)备份此值以跟踪不同的用户并保存值。如果您还没有网络服务,请查看parse.com。

示例

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//grab coins
int totalCoins = [defaults integerForKey:@"totalCoins"];

//add coins
totalCoins += coinsThisLevel;

//save
[defaults setInteger:totalCoins forKey:@"totalCoins"];
[defaults synchronize];

答案 1 :(得分:1)

您熟悉MVC(模型 - 视图 - 控制器)设计模式吗?这就是你需要的。我会做一些事情,比如创建一个Coins类,在app delegate中创建它的一个实例,并在各个视图控制器中传递该实例。您可以在班级中使用方法添加更多硬币,保存硬币值,必要时加密。您可以使用KVO(键值观察)来观察您的硬币实例以更改@property,这样感兴趣的各方就可以在硬币数量发生变化时更新显示内容。

答案 2 :(得分:1)

为了得分,我建议您使用NSUserDefault保存并将其另存为标签。一些代码:

 //Saving
[[NSUserDefaults standardUserDefaults] setInteger:HighScore forKey:@"HighScore"];
    //Loading
    NSInteger highScore = [[NSUserDefaults standardUserDefaults] integerForKey:@"HighScore"];

查看文档:{​​{3}}