Я использую этот код, чтобы узнать, делится ли счет пользователей на 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.
Какие-либо предложения?
Вы можете сохранить внешний флаг:
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;
линии interval = interval - 1;
один раз, затем переместите проверку внутри внешнего блока if
, например:
if(hitCount % 20 == 0){
...
if (!bDivBy20) {
...
}
...
}