만들면서 배우는 안드로이드 게임 프로그래밍 - 개정판 만들면서 배우는 시리즈
황동윤 / 한빛미디어 / 2013년 7월
평점 :
절판


 책 제목에 충실하게 만들면서 배우게 구성이 되어 있다. 기초부터 배우는 게임 프로그래밍의 원리라는 부제목은 Android나 Java에 대해서 지식이 없어도 볼 수 있을 것 같은 착각을 잠시 줬지만 이 책을 읽어 나가면서 이는 게임 프로그래밍에 대한 것으로 한정 하는 것임을 알 수 있었다.

 

 Android 프로그래밍을 조금 하고 있는 입장에서 "Android 게임 프로그래밍이 다르면 뭐 얼마나 다르겠어? 책도 Android 기초 프로그래밍 책하고 비슷하겠지", "다른 Android 기초 프로그래밍 책에 비해 얇기 때문에 다루는 내용도 많지 않겠네" 라고 생각했지만, 이는 완전히 잘못된 생각이었다.

 페이지를 늘리기 쉬운 개발환경 설정을 적은 페이지로 안내 하고 바로 첫 게임인 짝 맞추기 게임을 만들기 시작하며 게임 프로그래밍과 이책이 다르다는 것을 알 수 있었다.

 

 다른 책들은 보통 Activity 로 시작하고 이에 대한 설명을 하게 되는데, 책에서는 프로젝트 생성시에 만들어지는 기본 Activity만 이용하고 새로운 Activity 생성이나 설명도 하지 않는다.

 부록에 가서야 참고적으로 Activity 의 생명주기를 설명하고 이 또한 게임 정보를 생명주기에 맞게 관리하는 법을 들어 설명한다. 그리고 AndroidManifest.xml 에 대한 설명은 없고 단지 236 페이지에 가서야 타이틀바를 없애고 전체화면 모드를 쓰기 위해 수정하기 위해 처음 등장한다.

 

 android.theme  = "@android:style/Theme.Black.NoTitleBar.Fullscreen"

 

 이책은 철저히 게임을 위해 집중되었다. 모든 부분은 게임을 위해 배우고, 게임의 요소를 들어 설명한다.

 

  제대로 설명하자면 두꺼운 책 한 권인 디자인패턴도 전쟁터에 있는 한 부대의 지휘관이 두 명이 되는 것을 방지하기 위해 사용하는 싱글턴 패턴, 캐릭터가 무기들을 동적으로 계속해서 바꿀 수 있고, 개발자는 무기의 추가나 삭제와 같은 관리적인 면에서도 더욱 편하기 위해 사용하는 스트래티지 패턴,

NPC를 구현하면서 너무 많은 if, else 를 사용하지 않고  객체의 상태에 따른 행동을 클래스화해서 관리하기 위한 스테이트패턴, 유닛을 끊임없이 생성해야 하는 전략 시뮬레이션 게임같이 인스턴스를 동적으로 생성할 때 유용한 팩토리 패턴이라고 설명을 할 정도이다.

 디자인 패턴을 왜 쓰는지 모르고 그냥 쓰는 경우가 많은데 게임의 상황을 예로 들어 필요성을 먼저 이끌어 낸 뒤 설명하기 때문에 좀 더 집중해서 볼 수 있었다.

 

 철저하게 점증적으로 두 가지 게임 프로젝트를 통해 각각에 요소와 기능을 붙혀 나가며 필요한 기술을 먼저 익히고 해당 게임에 적용 하는 식으로 잘 구성 되어 있다.

 첫 번째 게임인 짝 맞추기 게임에서 이미지처리가 필요하니 배우고, 입력 처리가 필요하니 키패드와 터치로 입력받는 것을 배운다. 또한 Thread 사용, 랜덤값 발생, 사운드 사용도 배우는데 학습이 어려운 부분중 하나인 Thread 를 학습할때도 철저하게 점증적이다.

 두 개의 엘리베이터가 움직이는 예제로 Thread를 배우는데 몇 번의 과정을 통해서도 엘리베이터는 움직이지 않고 심지어 에러까지 냄으로써 안드로이드에서는 View가 생성되면 그 View 를 생성한 스레드만 해당 View에 접근 할 수 있다는 것을 알려준다.

 대부분의 책과 다르게 이러면 에러가 난다가 아니라, 예제를 일부러 에러를 나게 만들고 같이 에러를 해결하는 방식으로 진행된다. 개인적으로는 상당히 만족스러운 방식이었다.

 

 두 번째 게임인 슈팅게임은 평소에 궁금했던 슈팅게임에 대해서 정말 기초 부터 만드는 과정을 함께 할 수 있었다. 특히 두 번째 게임 부터는 본격적으로 게임 프로그래밍은 일반 프로그래밍과 다르다는 것을 알 수 있었다. 

 일반적으로 기본 View 를 사용하는 것과 다르게 게임처럼 연산이 많은 애플리케이션에서 모든 연산을 UI 스레드에서 처리하다 보면 ANR(응답없음)이 발생하기 때문에 게임개발에서는 SurfaceView를 사용해야 하고, 다른 View는 화면 업데이트를 UI 스레드에서 하지만 SurfaceView 는 백그라운드로 처리하므로  애플리케이션의 자원을 차지하지 않고, 뷰를 원활하게 업데이트할 수 있으며 OpenGL을 통한 가속도 지원하므로 3D그래픽도 표현할 수 있음을 알게 된다.

 플레이어, 배경, 적, 미사일, 충돌 처리, 아이템 등 따라하면서 점점 업그레이드 되는 내 슈팅게임을 보면서 만드는 재미를 더욱 느낄 수 있었다.

 

  '지금까지 게임을 좀 더 게임답게 만드는 요소들을 추가해봤습니다. 하지만 아직 다른 슈팅게임과 비교하면 부족한 것을 느낄 수 있을 겁니다. 다른 슈팅 게임을 플레이해보면서 우리 게임에 없는 요소들을 파악하고, 각자의 역량에 따라 추가해보기 바랍니다.'  이렇게 마무리 되는 책이 아쉽다는 생각이 들 정도로 조금씩 게임이 좀 더 게임답게 되는 과정이 너무 즐거 웠다.

 안드로이드 프로그래밍에 대해서 조금을 알고 있으나 게임을 어떻게 만들어야 할지 모른다면 이 책이 정말 좋은 교재가 되어줄 것 이다.

 

 그리고 전체적으로 매우 만족스러운 책이지만, 개인적으로 아쉬운 부분에 대해서 아래와 같이 남겨본다. 

 

* 29 페이지

그림2-6 View 클래스를 상속한 클래스 생성

Inherited abstract method 는 check가 되어있어야 하는데 스크린샷에 체크가 빠져있음

이미지를 뛰우면서 Context 에 대해서 전혀 설명하지 않은 점

31 페이지

2.1.2 Canvas 를 이용한 이미지 그리기 에서 Canvas 에 대한 설명이 없음.

 

* 전체적으로 변수 네이밍룰이 어색했음.

android 프로그래밍에서 변수 네이밍에 _를 사용한 것이 낯설음.

ex) _android , m_Card_Backside, ...

 

* 44 페이지

CardGameView.java 파일에서 m_Card_Backside 가 전역으로 선언되어 있는 부분이 생략 됨.


* 49 페이지

public int m_Color;

public int m_state;

변수 네이밍에 일관성이 없이 m_Color 는 C가 대문자, m_state 의 s는 소문자

 

* 58 페이지

안드로이드와 블랙베리는 서로 다른 OS인데, 블랙베리를 언급하며 터치 입력 방식을 알아둬야 한다는 것은 잘못된 예를 사용 한 것 같다.

 

* 82 페이지

 일일이 Card.CARD_CLOSE 로 지정해주기 보다 Card 의 생성시에 기존의 m_sate = CARD_SHOW로 했던 것을 Card.CARD_CLOSE 변경하는 것이 어땠을까? 하는점이 있지만 뒤의 86페이지를 보면 게임을 다시 초기화 시킬때 필요하므로 startGame 이라는 이름보다는 initGame 이 어땠을까? 하는 생각이 든다.

 

* 87 페이지

Rect 를 85, 115 를 하면서야 비로서 사용되는 이미지의 크기를 알 수 있었다. 터치 처리, 화면 표시를 고정 숫자 값을 사용하는데 해당 이미지 파일을 처음에 제공하지 않기에, 책을 보는 독자가 자신의 이미지를 사용해서 따라하기 식으로 하려고 할 때 원활하게 따라하기가 어렵다. 이는 뒤의 슈팅게임도 마찬가지 이다. 이미지 리소스만 미리 모아서 URL로 다운 받을 수 있게 제공하면 좋았을 것 같다.

 

* 143 페이지

'현재 안드로이드 2.2 버전'이라는 말에서 너무 오래된 책 같은 느낌을 준다.

현재 안드로이드 2.2 버전의 점유율은 3.1% 밖에 되지 않는다.

http://developer.android.com/about/dashboards/index.html

현재 2.2 버전은 MediaPlayer, SoundPool MediaPlayer 로 사운드를 대부분 처리 할 수 있지만, MediaPlayer 만으로는 게임을 제작하기 어렵습니다.

현재 안드로이드 2.2 버전에서 MediaPlayer로 사운드를 재생할 때 사운드 리소스 자원을 동기화 하기 때문입니다.

 

* 215 페이지

 스택에 대해서는 조금 더 설명이 추가되어도 좋지 않았을까 하는 생각이 든다.

스택을 사용해서 이를 구현할 수 있습니다. 여기서는 직접 구현하지 않고 간단히 힌트만 드릴 테니 각자 구현해보기 바랍니다.

 

* 255 페이지

 무한 스크롤 방식도 조금 더 소개하고 예제를 들어줬으면 좋겠다.

 

* 326 페이지

 멀티 터치는 게임의 조작성과 관련한 핵심 부분으로 생각되기에 해당 부분은 조금 더 설명하고 도전과제가 아닌 같이 적용하는 과정이 추가되었으면 좋겠다.

이를 슈팅게임에 적용하는 것은 어렵지 않으니 각자 터치로 이동하면서 미사일도 발사할 수 있게 구현해보기 바랍니다. 이는 여러분의 도전 과제입니다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo