메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

독자리뷰

게임프레임워크 소스가 완전 엉터리

hyc9***

|

2014-09-16

만들면서 배우는 HTML5 게임 프로그래밍: PC와 스마트폰을 한 번에 잡는 멀티 플랫폼 게임 프로그래밍

어떤 게임을 제작하더라도 게임이라면 갖춰야 할 요소를 프레임워크로 정리했다. 게임 루프 생성, 키보드와 마우스를 위한 입력 처리 시스템, 스마트폰 환경을 위한 터치 입력 시스템, 사운드 시스템, 게임 상태 전환, 그래픽 객체와 애니메이션 관리자, 리소스 프리로더, 프레임 스키퍼, 디버깅 시스템을 단계별로 완성하며 게임의 기초 원리를 완벽하게 학습한다.

  • 저자 : 황동윤
  • 출간 : 2013-06-22
책대로 하면 크롬에서 사운드 객체가 반복이 안된다.

크롬에서 사운드객체를 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원에 판다는게 정말 어처구니가 없다.
닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?