안녕하세요. 틀린그림찾기 같은 게임(같은그림찾기)를 제작 중입니다.

 

 

 

 

1.png

 

 

위 그림에서 보면 가운데 두 그림은 View를 상속받아 제작한 커스텀 위젯(imageCanvas)입니다.

 

imageCanvas클래스에는 정답정보를 가진 twinArea라는 구조체가 정의되어 있고

twinArea는 정답에 해당하는 좌표와 정답을 맞추었는지 여부(boolean)정보를 저장하고 있습니다.

 

imageCanvas클래스 onDraw()에서 twinArea배열을 검색해서 정답을 맞춘부분은 위 그림과 같은 녹색V그림을 나타냅니다.

 

 

 

      //클릭한 곳이 정답일 경우
     else {            
      //이미 맞춘곳이면 무시
      if(PicL.isVirgin(correctNum)==false) return;
      //맞춘곳으로 설정
      PicL.disableVirgin(correctNum);
      PicR.disableVirgin(correctNum);
      //맞춘 정답 갯수 1증가
      iCorrectCount += 1;
      if(iCorrectCount>=5){ //5개 모두 맞추었으면 
       //타이머정지
       threadStop();
       //3초 쉬었다가 다음 스테이지
       try {
        Thread.sleep(3000);
       }
       catch(Exception e){      
       }
       //다음 스테이지 진행
       StageStart();
      }
     }

사용자가 터치를 이용해 정답을 맞출 경우, disableVirgin(int)를 호출합니다. (6,7줄)

disableVirgin(int)에서는 정답을 맞췄다는 체크를 하고 invalidate();를 호출해서 onDraw이벤트를 발생시키고 있습니다.

그 후 다섯군데를 모두 맞추었으면 약 3초간 쉰 후 다음 스테이지로 넘어갑니다. (10줄)

 

여기서 문제가 발생하는데 1~4번째 맞출때까진 녹색 V가 잘나타나는데

5번째 맞추면  disableVirgin(int)를 통해 onDraw이벤트가 발생하기전에 Thread.sleep(3000);이 먼저 실행되는 것 같습니다.

마지막 녹색V가 그려지지 않고 3초 쉬었다가 다음스테이지로 넘어가 버립니다.

 

 

로직 순서상으론

disableVigin -> 정답체크 -> invalidate()호출 -> onDraw실행 -> iCorrectCount증가 -> iCorrectCount체크 -> Thread.sleep실행

이렇게 되야 할 것같은데 생각과는 다르네요;

 

 

마지막 다섯번째 녹색V까지 잘 그려지고난 후 3초간 멈추려면 어떡게해야하나요.

thread.sleep말고 다른걸 써야하나요.