从双减去

时间:2011-12-08 02:47:34

标签: java android andengine

我正在使用此代码查看用户分数是否可被20整除。

if(hitCount % 20 == 0){
    interval = interval - 1; 
    Log.e("Score", "User score is divisible by 20 decreasing interval to " 
                   + interval);

    timer.setInterval(interval);
}

唯一的问题是此代码位于andengine中的IUpdate方法中,每秒更新一次。

因此,如果用户得分可被20整除超过1秒,则会减去1。

如果用户得分可以被20整除,我只希望它减去一次。

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

你可以保留一个外部标志:

bool alreadySet = false;

然后,在您的代码中,设置或取消设置:

if(hitCount % 20 == 0) {
    if(!alreadySet) {
        alreadySet = true;
        // Continue with your code
    }
} else {
    alreadySet = false;
}

我明白你的意思 - 它确实感觉有点混乱。

答案 1 :(得分:2)

我知道有一个选定的答案,但是:

在更新帖子中检查分数是否可以被20整除,而不是在更新分数时不检查它?它会减少您检查'%20'的次数(提高效率),也可以解决您的问题。

答案 2 :(得分:-2)

您可以使用标记来检查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) {
      ...
   }
   ...
}