因此,我一直在为这段代码工作长达一天的时间。我相信必须有一种简单的方法来解决此问题,但我现在什么都无法想。首先是一小段代码:
if(Settings.totalHits >= 50 && Settings.totalHits <= 99)
{
Settings.medal1 = true;
Settings.save(game.getFileIO());
totalMedals = totalMedals + 1;
}
这是一个非常基本的成就/奖章制度。基本上,一旦用户总共完成了50次点击,它将“ medal1”的值设置为true,这将删除仅在级别1 = false时显示的“锁定”图像。
问题涉及totalMedals部分。基本上,用户总共可以获得32枚奖牌,并且在解锁后,需要将totalMedals更新1。因此,在这种情况下,输出为“ 1/32”。除非现在已解锁奖牌(击中50个)之后,锁定图像已被正确删除,但totalMedals仍以极快的速度增加1,而不仅仅是增加到“ 1”并停止。
就像我说的,这里一定有一些我忽略的东西。我试图扔进for循环,但这没用(或者我做错了)。知道我可以更改以解决此问题吗?
最佳答案
您仅想在达到阈值并且尚未解锁时才解锁勋章(上限与此处无关),因此可以使用:
if (Settings.totalHits >= 50 && !Settings.medal1) {
Settings.medal1 = true;
Settings.save(game.getFileIO());
totalMedals++;
}
if (Settings.totalHits >= 100 && !Settings.medal2) {
Settings.medal2 = true;
Settings.save(game.getFileIO());
totalMedals++;
}
// and so on.
当然,这肯定会要求进行重构,以便有效地使用数组,例如:
for (i = 1; i < 33; i++) {
if (Settings.totalHits >= 50 * i && !Settings.medal[i-1]) {
Settings.medal[i-1] = true;
Settings.save(game.getFileIO());
totalMedals++;
}
}
而且,如果阈值不是50的直接倍数,则可以轻松地将任意复杂的函数(或数组查找)放入
if
语句中,以满足您的需求。