2014-11-24 50 views
0

我意識到for-loop可能是實現此目標的最佳方法,我只是不知道每隔5個障礙通過的正確方式,將1添加到totalScriptures integer僅在第二個NSInteger更改值時添加NSIntegers

我有一個類似於flappy bird的應用程序。一個對象在兩個垂直對象之間傳遞,用戶點擊以保持它爲浮動狀態。

評分方法略有不同,所以我會盡我所能解釋它。在應用程序中,用戶通過障礙物收集「經文」。對於通過的每5個障礙物,用戶獲得1分。因此,在我的得分方法中,我首先除以2(以解釋在兩個障礙物之間傳遞),然後除以5得出已經獲得了多少經文。

我也在追蹤所獲得的經文總數。我通過創建一個從0開始的NSUserDefault Integer來做到這一點。我試圖做的是除以2以獲得通過的障礙數量,然後除以5以獲得已獲得的經文數量,並將該數字添加到我前面提到的NSUserDefault。然而,通過你將要看到的代碼,一旦獲得了經文,它就保持了這個價值,所以對於前5個障礙,一切都很好,但是一旦獲得了一個經文,它就會爲每個單詞添加一個經文時間。如果finalChange編號與上次報告不同,有人可以告訴我如何執行添加嗎?

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
       NSInteger startIt = [defaults integerForKey:@"totalScripturesCollected"]; 
       NSInteger goBetween = _score/2; 
       NSInteger finalChange = goBetween/5; 
       NSInteger toReport = startIt + finalChange; 

       [defaults setInteger:_score/2 forKey:@"theScore"]; 
       [defaults setInteger:toReport forKey:@"totalScripturesCollected"]; 
       [defaults synchronize]; 
       NSLog(@"startit %ld", (long)startIt); 
       NSLog(@"gobetween %ld", (long)goBetween); 
       NSLog(@"finalchange %ld", (long)finalChange); 
       NSLog(@"toreport %ld", (long)toReport); 
+0

你多久打一次電話? _score是否包含您之前保存的分數,或者您是否在每次保存前重新設置分數? – 2014-11-24 17:38:06

+0

@TiagoLira當新遊戲開始時,_score重置爲0.每次在障礙物之間穿過時,它會增加2點。經過5次障礙後,獲得1經文。目標是通過每5個障礙物將NSUserDefault增加1。該代碼在成功通過一個障礙物時被調用。 – user717452 2014-11-24 17:40:21

回答

1

我會說你應該在遊戲結束時只進行一次計算。

如果您需要一直顯示計算結果,您可以添加一個類變量以保持計數。而在該代碼的每次運行做:

count++; 
if (count == 10) { 
    NSInteger toReport = startIt++; 
    [defaults setInteger:toReport forKey:@"totalScripturesCollected"]; 
    [defaults synchronize]; 
    count = 0; 
} 

因此每10個障礙過去了,你添加一個經文,然後重新開始計數。

+0

我會嘗試一下,但這是用來獲得成就的,所以它必須通過應用程序來運行,所以如果他們得到1個經文就會顯示成就,如果在同一級別,他們會得到10個以上的成績將顯示10個經文的成就。將這個內部代碼工作好嗎? – user717452 2014-11-24 18:01:25

+0

是的,每次使用該代碼更新數字。請注意,「count」必須是已保存的類變量,如「_score」。這應該可以解決你的問題。 – 2014-11-25 10:59:09

+0

此外,對於將來的情況,我的建議是,您使用本地和類變量進行這種計算,並且使用NSUserDefaults來偶爾保存數據(例如在遊戲結束時)。它會使代碼更容易混淆:) – 2014-11-25 11:04:41