仅当第二个NSInteger更改值时才添加NSIntegers

时间:2014-11-24 17:06:38

标签: ios math nsuserdefaults addition nsinteger

我意识到for循环可能是最好的方法,我只是不知道为每5个障碍传递说法的正确方法,在totalScriptures整数中加1

我有一个类似于飞鸟的应用程序。对象在两个垂直对象之间传递,用户点击以使其保持浮动状态。

评分方法略有不同,所以我会尽力解释。在应用程序中,用户收集经文'通过障碍物。通过每5个障碍,用户获得1.因此在我的评分方法中,我首先除以2(考虑在两个障碍之间传递),然后除以5以计算已经获得了多少经文。

我也在努力追踪所获得的经文总数。我这样做是通过创建一个从0开始的NSUserDefault整数。我试图做的是除以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);

1 个答案:

答案 0 :(得分:1)

我想说你应该在游戏结束时只进行一次计算。

如果您需要始终显示计算结果,可以添加一个类变量来保持计数。并且在该代码的每次运行中都执行:

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

所以每过10个障碍,你加一个经文,然后再开始计算。