안녕하세요. 틀린그림찾기 같은 게임(같은그림찾기)를 제작 중입니다.
위 그림에서 보면 가운데 두 그림은 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말고 다른걸 써야하나요.