所以,我一直在研究这个代码,以便长达一天。我相信必须有一个简单的方法来解决这个问题,但我现在想不出任何事情。首先是代码的一小部分:
if(Settings.totalHits >= 50 && Settings.totalHits <= 99)
{
Settings.medal1 = true;
Settings.save(game.getFileIO());
totalMedals = totalMedals + 1;
}
这是一个非常基本的成就/奖章制度。基本上,一旦用户总共完成了50次点击,它将“medal1”的值设置为true,这将删除仅在medal1 = false时显示的“锁定”图像。
该问题涉及totalMedals部分。基本上,用户可以获得总共32枚奖牌,并且在一个解锁后,它需要将totalChals更新为1.因此在这种情况下,输出将是“1/32”。除了,现在奖牌解锁后(通过击中50),锁定图像被正确删除,但是总数量保持非常快速增加1而不是仅增加到“1”并停止。
就像我说的那样,我必须在这里看到一些小东西。我试着扔进一个for循环,但那不起作用(或者我做错了)。知道我可以改变什么来解决这个问题吗?
答案 0 :(得分:3)
而不是
if(Settings.totalHits >= 50 && Settings.totalHits <= 99)
尝试:
if(Settings.totalHits >= 50 && Settings.totalHits <= 99 && !Settings.medal1)
这样,一旦奖牌被触发,就无法再次触发。因此,totalMedals
仅递增一次。
答案 1 :(得分:0)
如果您已达到阈值并且尚未解锁它(您的上限与此无关),您只想解锁奖牌,因此您可以使用:
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
语句中以满足您的需求。