2012-12-07 92 views
0

我正在开发一款使用基本点系统拍摄敌人的游戏,然后将该得分转换为硬币值以解锁游戏中的额外枪支。所以当你玩的时候,你的分数会提高,当你死的时候屏幕会显示你的分数,以及你从那个游戏中获得的硬币数量(此刻的分数是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; 

回答

4

我认为最简单的方法就是以任何方式在[NSUserDefaults standardUserDefaults]中存储硬币的数量,您可以按照提供的其他答案的方式进行操作,但在应用程序关闭时您需要保存该数据。

我也将这个值与您的服务器(如果有的话)保持一致,以跟踪不同的用户并保存值。如果您还没有Web服务,请查看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]; 
+0

我试图从它得到奇怪的值,例如,如果我得到70个硬币,它会显示像550,000。我将使用我正在使用的代码编辑我的问题。 –

+0

我在示例中添加了一个示例 – mkral

+0

,用于在'NSNumber'和'NSInteger'之间切换。如果你想要int值你可以使用'someNSNumber.integerValue' – mkral

1

你熟悉MVC(模型 - 视图 - 控制器)设计模式?这就是你需要的。我会做一些事情,比如创建一个Coins类,在应用程序委托中创建它的一个实例,并在各种视图控制器之间传递该实例。你可以在你的课堂上添加更多硬币的方法,保存硬币值,必要时进行加密。您可以使用KVO(键值观察)观看您的硬币实例以更改@property,因此感兴趣的各方可以执行一些操作,例如在硬币数量发生变化时更新其显示内容。

+0

这不是设计,但在'Coins'类,你仍然需要在某个地方保存不好的建议。我会做一个'Coins'单身课程,每次你设置硬币或总硬币更新'standardUserDefaults'并同步它。然后,当你启动你的应用程序实例化CoinsSingleton并使用它。 – mkral

1

好了分数,我会建议你NSUserDefault保存,并保存为一个标签。一些代码:

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

退房的文档:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html

+0

将代码的加载部分保存在viewdidload或viewdidar中... –

相关问题