0

所以,我一直在研究这段代码很长的一天。我确信必须有一种简单的方法来解决这个问题,但我现在什么都想不出来。首先是一小段代码:

        if(Settings.totalHits >= 50 && Settings.totalHits <= 99)
        {
           Settings.medal1 = true;
           Settings.save(game.getFileIO());
           totalMedals = totalMedals + 1;
        }

这是一个非常基本的成就/奖牌系统。基本上,一旦用户总共完成了 50 次点击,它会将“medal1”的值设置为 true,这将删除仅在 Medal1 = false 时显示的“锁定”图像。

该问题涉及总奖牌部分。基本上,一个用户总共可以获得 32 个奖牌,解锁一个后,它需要将 totalMedals 更新 1。所以在这种情况下,输出将是“1/32”。除了,现在在解锁奖牌后(通过击中 50),锁定图像被正确删除,但总奖牌不断增加 1,而不是仅仅增加到“1”并停止。

就像我说的,我必须在这里俯瞰一些小的东西。我试图扔进一个 for 循环,但没有奏效(或者我做错了)。知道我可以改变什么来解决这个问题吗?

4

2 回答 2

3

代替

if(Settings.totalHits >= 50 && Settings.totalHits <= 99)

尝试:

if(Settings.totalHits >= 50 && Settings.totalHits <= 99 && !Settings.medal1)

这样,勋章一旦被触发,就无法再次触发。因此,totalMedals只增加一次。

于 2013-04-24T03:29:09.037 回答
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语句中以满足您的需求。

于 2013-04-24T03:31:59.910 回答