Добавляйте NSInteger ТОЛЬКО, когда 2-й NSInteger меняет значение

Я понимаю, что цикл for, вероятно, был бы лучшим способом сделать это, я просто не знаю, как правильно сказать, что каждые 5 пройденных препятствий добавляют 1 к целому числу totalScriptures

У меня есть приложение, похожее на Flappy Bird. Объект проходит между двумя вертикальными объектами, и пользователь нажимает, чтобы он оставался плавающим.

Метод подсчета очков немного отличается, поэтому я сделаю все возможное, чтобы объяснить его. В приложении пользователь собирает «писания», преодолевая препятствия. За каждые 5 пройденных препятствий пользователь получает 1. Поэтому в моем методе подсчета очков я сначала делю на 2 (чтобы учесть прохождение между двумя препятствиями), а затем делю на 5, чтобы вычислить, сколько Священных Писаний было заработано.

Я также пытаюсь отслеживать общее количество заработанных Священных Писаний. Я делаю это, создавая целое число NSUserDefault, которое начинается с 0. Я пытаюсь разделить на 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);

person user717452    schedule 24.11.2014    source источник
comment
Как часто вы так звоните? включает ли _score баллы, которые вы сохранили ранее, или вы сбрасываете их перед каждым сохранением?   -  person Tiago Lira    schedule 24.11.2014
comment
@TiagoLira, когда начинается новая игра, _score сбрасывается до 0. Он увеличивается на 2 каждый раз, когда проходит между препятствиями. После прохождения 5 препятствий зарабатывается 1 Священное Писание. Цель состоит в том, чтобы увеличить NSUserDefault на 1 за каждые 5 пройденных препятствий. Этот код вызывается при успешном прохождении одного препятствия.   -  person user717452    schedule 24.11.2014


Ответы (1)


Я бы сказал, что вы должны делать этот расчет только один раз в конце игры.

Если вам нужно постоянно показывать результат расчета, вы можете добавить переменную класса, чтобы вести подсчет. И при каждом запуске этого кода выполните:

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

Таким образом, каждые 10 пройденных препятствий вы добавляете одно место Писания, а затем снова начинаете считать.

person Tiago Lira    schedule 24.11.2014
comment
Я попробую это, но это используется для получения достижений, поэтому оно должно запускаться через приложение, поэтому, если они получат 1 священное писание, оно покажет достижение, а если на том же уровне они получат еще 10, оно будет показать достижение 10 священных писаний. Будет ли размещение этого внутри этого кода работать нормально? - person user717452; 24.11.2014
comment
Да, используйте этот код для обновления номера каждый раз. Обратите внимание, что count должен быть сохраненной переменной класса, например _score. Это должно решить вашу проблему. - person Tiago Lira; 25.11.2014
comment
Кроме того, в будущих ситуациях я советую вам использовать локальные переменные и переменные класса для такого рода вычислений и использовать NSUserDefaults просто для периодического сохранения данных (например, в конце игры). Это сделает код менее запутанным :) - person Tiago Lira; 25.11.2014