Вычитание из двойного
Я использую этот код, чтобы увидеть, делится ли оценка пользователей на 20.
if(hitCount % 20 == 0){
interval = interval - 1;
Log.e("Score", "User score is divisible by 20 decreasing interval to "
+ interval);
timer.setInterval(interval);
}
Единственная проблема заключается в том, что этот код находится в методе IUpdate в andengine, который обновляется каждую секунду.
Таким образом, если оценка пользователя делится на 20 в течение более 1 секунды, она продолжает вычитать 1.
Я только хочу вычесть один раз, если оценка пользователя делится на 20.
Какие-либо предложения?
3 ответа
Вы можете сохранить внешний флаг:
bool alreadySet = false;
Затем в вашем коде установите или удалите его:
if(hitCount % 20 == 0) {
if(!alreadySet) {
alreadySet = true;
// Continue with your code
}
} else {
alreadySet = false;
}
Хотя я понимаю, что вы имеете в виду - это выглядит как грязное решение.
Я знаю, что есть выбранный ответ, но:
Вместо того, чтобы проверять, делится ли оценка на 20 в ветке обновления, почему бы вам не проверить ее при обновлении оценки? Это уменьшит количество проверок на "% 20" (повышение эффективности), а также решит вашу проблему.
Вы можете использовать флаг, чтобы проверить, hitCount
уже делится на 20
boolean bDivBy20 = false; // outside of the method
...
if(!bDivBy20 && hitCount % 20 == 0){
bDivBy20 = true;
interval = interval - 1;
Log.e("Score", "User score is divisible by 20 decreasing interval to " + interval);
timer.setInterval(interval);
}
Кроме того, если вы хотите ввести if
заблокировать, но выполнить только строку interval = interval - 1;
один раз, затем переместите чек внутрь внешнего if
блок, например:
if(hitCount % 20 == 0){
...
if (!bDivBy20) {
...
}
...
}