因此,我一直在为这段代码工作长达一天的时间。我相信必须有一种简单的方法来解决此问题,但我现在什么都无法想。首先是一小段代码:

        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语句中,以满足您的需求。

10-08 14:35