이번 시간에는 소리 효과를 추가해 보겠습니다. 동물 카드를 뒤집을 때 해당 동물 소리가 나도록 구현해 보고자 합니다.
assets 폴더 아래에 소리와 음악 파일들을 담을 디렉토리를 만들어 주고 사용하고자하는 파일들을 넣어 줍니다. 참고로 책에는 ogg 파일을 공식적으로 지원한다고 되어 있는데 mp3도 문제 없이 잘 재생이 되었습니다. 하지만 일부 wav 파일은 재생이 안 되는 문제가 있어 지난 시간에 소개해 드린 audacity 소프트 웨어를 이용해 ogg로 변환해 사용했습니다.
Sound를 선언해주고 engineOptions 에 사운드를 추가해 줍니다.
onCreateResources() 메서드 안에 조금 전에 만든 기본 sound folder를 지정해 줍니다. 각각의 동물 소리도 try/catch 구문 안에 작성해 줍니다.
onAreaTouched() 메서드 안에 위와 같이 작성해 주면 카드 터치시 해당 동물 소리가 재생됩니다.
이번 시간에는 카드를 뒤집어 짝이 맞으면(같은 동물 카드) 카드가 오픈된 상태를 유지하고, 짝이 맞지 않으면 카드를 모두 다시 뒤집어 뒷면이 보이도록 구현해 보겠습니다.
카드 짝이 맞는 상태인지를 보여주는 boolean과 짝이 맞는 카드롤 제외하고 오픈된 카드 수를 보여 주는 변수를 선언해 줍니다.
게임 시작시 관련 변수를 초기화하는 메서드를 만들고 카드 짝 맞은 상태, 오픈된 카드 수…등 관련 변수들을 초기화해 줍니다.
처음 뒤집은 카드와 다음 뒤집은 카드를 식별하기 위해 2개의 String을 선언해 줍니다.
카드 sprite에 위와 같이 작성 후
onCreateScene() 메서드 안에 있는 scene은 삭제하고 전역 변수로 선언해 줍니다.
짝이 맞은 카드를 제외한 모든 카드를 뒷면으로 뒤집는 closeAll() 메서드를 위와 같이 구현해 줍니다. 여기서 카드를 뒤집을 때 0.2초 지연 시키도록 코딩을한 이유는 만약 짝이 안 맞는 두번째 카드를 열었을 때 지연 시간을 안 주면 컴퓨터는 매우 빠르기 때문에 카드가 안 열리는 것 처럼 보입니다.(0.2f -> 0f 로 변경해서 확인해 보세요.) 그리고 일반적으로 Java에서 시간을 지연시킬 때 Thread를 사용하는데, AndEngine에서는 Thread를 이용해서는 작동을 안 하므로 위 방법을 활용해 시간 지연을 구현하면 됩니다. 그리고 AndEngine은 scene을 만들 때 중복 attachChild는 매우 엄격하고(에러 발생), detachChild는 너그럽기 때문에 중복 attachChild가 발생하지 않도록 주의 합니다.