책대로 하면 크롬에서 사운드 객체가 반복이 안된다.
크롬에서 사운드객체를 load 하면 ended 속성이 다시 false로 바뀌기 때문.
근데 책에선 eneded를 검증한답시고 if( ~.ended == true|| ~.isPlayed == false) 를 조건문으로 걸어놨다.
애당초 크롬에서는 ended 속성이 true 일때 저 조건문을 통과할수가 없어서 당연히 실행이 안된다.
올려놓은 에제소스도 엉터리이다. 제대로 실행을 해봤는지 의문이다.
이미지파일의 이름이 틀려 게임을 실행해도 실행이 되지 않고
더 웃긴건 예제소스에선 사운드프레임워크가 제대로 실행이 되길래 뜯어봤더니
if(~.ended == true || ~sound.isPlayed == false) 로 되있다.
웃긴건 사운드가 실행되었을때 true로 바꾸어주는 함수는
~.inPlayed 이고 ~sound.isPlayed 는 초기값으로 false 를 넣어
사운드의 실행여부와 관계없이 항상 false이다.
교재에는 if( ~.ended == true|| ~.isPlayed == false) 라고 해놓고 막상 저자가 실행을 해보자 실행이 안되어
전체소스코드와 예제파일에는 if(~.ended == true || ~sound.isPlayed == false) 로 해놨는 것 같은데
이유야 어찌되었든 둘 다 완전 엉터리이다.
왜냐하면 ~.ended 의 경우 항상 load()를 수행하므로 false, 즉 true가 나올 수 없다.
~.isPlayed 의 경우 음악이 재생되면 true를 반환하는데,
그럼 크롬에서는 무슨 수를 써도 if( ~.ended == true|| ~.isPlayed == false) 는 영원히 통과할 수 없다.
(원래 ended 속성이 true가 되어서 통과를 해야하는 부분)
어찌된 이유인지 학생인 나도 ended가 계속 false로 반환되어서 저부분이 통과가 안되어 며칠을 검증했는데
저자는 전체 소스코드와 예제 소스에서 if( ~.ended == true|| ~.isPlayed == false) 를
if(~.ended == true || ~sound.isPlayed == false) 로 고쳐놓았다.
~sound.isPlayed 의 경우 초기값으로 false를 주고, 음악재생이 완료되면 ~.isPlayed 를 true로 줄 뿐
~sound.isPlayed는 변동사항이 없다. 즉 ~sound.isPlayed 는 항상 false 이다.
그럼 저자가 적어놓은 if(~.ended == true || ~sound.isPlayed == false) 는 말도안되는 코드이며,
if( ~.ended == true|| ~.isPlayed == false)가 실행이 되지 않자 왜 안되는지 모르고 주먹구구식으로
변경한 코드라고 생각할수 밖에 없다.
저자 스스로도 검증이 안된책을 40,000원에 판다는게 정말 어처구니가 없다.