2013-04-24 2 views
0

그래서이 코드를 하루 동안 길게 작업했습니다. 이 문제를 해결할 수있는 간단한 방법이 있어야한다고 확신하지만 지금 당장은 아무 것도 생각할 수 없습니다. 코드의 첫 부분 :값을 1 늘리면 영원히 계속됩니다.

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

이것은 매우 기본적인 성취/메달 시스템입니다. 기본적으로 사용자가 총 50 건의 조회를 완료하면 "메달 1"의 값을 true로 설정합니다. 그러면 medal1 = false 일 때만 표시되는 "잠금"이미지가 제거됩니다.

이 문제는 totalMedals 섹션을 다룹니다. 기본적으로 사용자가 획득 할 수있는 메달은 총 32 개이며 잠금 해제 된 후에 총 메달 수를 1 개 업데이트해야합니다. 따라서이 경우 출력은 '1/32'가됩니다. 단, 메달을 뽑은 후 (50을 치면), 잠금 이미지가 올바르게 제거되지만 totalMedals는 "1"로 증가하지 않고 매우 빠르게 증가합니다.

내가 말했듯이, 내가 여기에서 간과하고있는 작은 것이 있어야합니다. 나는 for 루프로 던져 보았지만 작동하지 않았다 (또는 잘못했다). 이 문제를 해결하기 위해 무엇을 바꿀 수 있습니까? 대신

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

시도의

답변

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. 

비록를 물론,이 긍정적 효율적으로 배열을 사용하기 위해 같은, 리팩토링에 대한 부른다 : 임계 값이 50의 직접 배수가 아닌 경우,

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++; 
    } 
} 

, 당신은 쉽게 임의의 복잡한 기능을 배치 (또는 수 배열 조회) i 귀하의 요구에 맞는 if 성명.

+0

정말 고마워요! 그것은 모두 지금 일하고있는 것 같습니다! – Badge

3

: 메달을가 트리거 된 후

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

이 방법은, 그것은 다시 트리거 할 수 없습니다. 따라서 totalMedals은 한 번만 증가합니다.

관련 문제