2012-12-07 91 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中... –

相關問題