『안드로이드 게임 프로그래밍』은 안드로이드 게임 개발을 시작하는 데 필요한 지식을 다룬 책이다. 게임 개발의 기본이 되는 파일 입출력(I/O), 사용자 입력 처리, 그래픽, 오디오 등 각 프레임워크 요소를 추상화하고 실제 예제 코드를 통해 각 프레임워크 요소를 적절히 구현함으로써 재사용할 수 있는 게임 프레임워크를 완성하는 법을 보여준다. 또 게임 로직 구현에 도움이 되는 배경 지식에 대한 설명을 통해 충돌 감지, 비트맵 블리팅, 3D 그래픽 프로그래밍 같은 고급 주제를 차례로 소개한다.
저자소개
저자 : 마리오 제흐너 저자 마리오 제흐너 (Mario Zechner)는 일과 시간에는 R&D 소프트웨어 엔지니어로 근무하고 저녁에는 Badlogic Games라는 이름으로 게임을 개발해 출시하는 게임 개발자로 일한다. 마리오는 수많은 프로토타입 게임과 소규모 게임을 비롯해 안드로이드용 Newton 게임과 윈도우, 리눅스, 맥 OS X용 Quantum 게임을 개발했다. 현재 그는 libgdx라는 오픈소스 크로스플랫폼 게임 개발 솔루션을 개발 중이다. 마리오는 코딩 작업 외에 게임 개발과 관련한 튜토리얼과 기술 문서 집필 활동도 열심히 하고 있다. 그가 쓴 글은 웹과 블로그(http://www.badlogicgames.com)에서 무료로 볼 수 있다.
역자 : 유윤선 역자 유윤선은 인디 개발자이자 프리랜서 번역가로 활동 중이다. 이따금 http://joshy21.com/weblog에 번역과 상관없는 글을 올리고 있다. 역서로는 『시작하세요! 아이폰 4 프로그래밍(위키북스)』, 『플래시 빌더 4 & 플렉스 4 바이블(위키북스)』, 『쉽고 빠르게 익히는 CSS3(위키북스)』, 『스프링 시큐리티 3(위키북스)』, 『시작하세요! 아이패드 프로그래밍(위키북스)』, 『플래시 게임 마스터(에이콘출판사)』, 『Adobe AIR 인 액션(위키북스, 공역)』, 『스프링 3 레시피(위키북스, 공역)』, 『액션스크립트 3.0 완벽가이드(인사이트, 공역)』 등이 있다.
목차
01장 안드로이드, 뉴 키즈 온 더 블록
안드로이드에 대한 간단한 소개 파편화 구글의 역할 - 안드로이드 오픈소스 프로젝트 - 안드로이드 마켓 - 챌린지, 개발자 지원 프로그램, 구글 I/O 안드로이드의 기능과 아키텍처 - 커널 - 런타임과 달빅 - 시스템 라이브러리 애플리케이션 프레임워크 소프트웨어 개발 킷 개발자 커뮤니티 기기, 기기, 기기! - 하드웨어 - 1세대, 2세대, 차세대 - 차세대 기기 - 게임 컨트롤러 모바일 게임의 차이점 - 주머니 속으로 들어간 게임 기기 - 상시 접속 상태의 유지 - 캐주얼 게임과 하드코어 게임 - 큰 시장과 적은 수의 개발자 정리
02장 안드로이드 SDK 첫 걸음
개발 환경의 설정 - JDK의 설정 - 안드로이드 SDK의 설정 - 이클립스의 설치 - ADT 이클립스 플러그인의 설치 - 이클립스 간단히 살펴보기 안드로이드 방식의 Hello World - 프로젝트의 생성 - 프로젝트 내용 살펴보기 - 애플리케이션 코드의 작성 안드로이드 애플리케이션의 실행과 디버깅 - 기기 연결 - 안드로이드 가상 기기의 생성 - 애플리케이션의 실행 - 애플리케이션 디버깅 - 로그캣과 DDMS - ADB의 활용 정리
03장 게임 개발
장르 - 각인각색 - 캐주얼 게임 - 퍼즐 게임 - 액션 및 아케이드 게임 - 타워 디펜스 게임 - 혁신 게임 게임 설계 - 펜은 코드보다 강하다. - 핵심 게임 방식 - 게임 스토리와 아트 스타일 - 화면과 화면 전환 코드 - 핵심적인 세부 내용 - 애플리케이션과 창 관리 - 입력 - 파일 I/O - 오디오 - 그래픽 - 게임 프레임워크 정리
04장 게임 개발자를 위한 안드로이드
안드로이드 애플리케이션의 정의 - 매니페스트 파일 - 엘리먼트 - 엘리먼트 - 엘리먼트 - 엘리먼트 - 엘리먼트 - 엘리먼트 - 10단계로 끝내는 안드로이드 게임 프로젝트 설정 - 게임의 아이콘 정의 안드로이드 API의 기본 - 테스트 프로젝트의 생성 - 액티비티 생명주기 - 입력 기기의 처리 - 파일 처리 - 오디오 프로그래밍 - 효과음의 재생 - 스트리밍 음악 - 기본 그래픽 프로그래밍 모범 개발 방식 정리
05장 안드로이드 게임 개발 프레임워크
공략 계획 AndroidFileIO 클래스 AndroidAudio, AndroidSound, AndroidMusic AndroidInput과 AccelerometerHandler - AccelerometerHandler: 가속도계의 감지 - Pool 클래스: 재사용은 좋은 것이다! - KeyboardHandler: 위, 아래, 왼쪽, 오른쪽 - 터치 핸들러 - AndroidInput: 위대한 조율자 AndroidGraphics과 AndroidPixmap: 두 개의 무지개 - 각기 다른 화면 크기와 해상도의 처리 - AndroidPixmap: 사용자를 위한 픽셀 조정 - AndroidGraphics: 드로잉 작업의 수행 - AndroidFastRenderView: 루프, 확장, 루프, 확장 AndroidGame: 모든 내용의 종합 정리
06장 Mr. Nom 안드로이드를 침공하다
자원의 생성 프로젝트 설정 MrNomGame: 메인 액티비티 - Assets: 편리한 자원 저장소 - Settings: 사용자 선택값과 하이스코어의 추적 - LoadingScreen: 디스크로부터 자원 로드 메인 메뉴 화면 HelpScreen 클래스(들) 하이스코어 화면 - 숫자 렌더링: 짧은 여행 - 화면 구현 추상화... 301 - Mr. Nom의 게임 공간에 대한 추상화: 모델, 뷰, 컨트롤러 - GameScreen 클래스 정리
07장 오픈GL ES의 간단한 소개
오픈GL ES는 무엇이고 왜 알아야 하나? - 프로그래밍 모델: 비유 - 투영 - 정규화된 기기 공간과 뷰포트 - 매트릭스 - 렌더링 파이프라인 시작에 앞서 알아야 할 내용들 작업을 쉽게 도와주는 GLSurfaceView GCGame: Game 인터페이스의 구현 엄마, 내가 빨간색 삼각형을 그렸어! - 뷰포트의 정의 - 투영 매트릭스의 정의 - 삼각형의 지정 - 내용 정리 정점 색상의 지정 텍스처 매핑: 손 쉬운 이미지 배치 작업 - 텍스처 좌표 - 비트맵 업로드 - 텍스처 필터링 - 텍스처의 정리 - 유용한 코드 조각 - 텍스처 활성화 - 내용 정리 - 텍스처 클래스 인덱스를 갖는 정점 - 재사용은 항상 유용하다. - 내용 정리 - Vertices 클래스 알파 블렌딩 다양한 원시 도형 : 점, 선, 스트립, 팬 2차원 변형: 모델-뷰 매트릭스를 활용한 재미있는 프로그래밍 - 세계 공간과 모델 공간 - 다시 살펴보는 매트릭스 - 변형을 활용한 첫 번째 예제 - 더 많은 변형 성능 최적화 - 프레임 레이트의 측정 - 안드로이드 1.5에서 실행되는 히어로의 문제 사례 - 오픈GL ES 렌더링을 느리게 만드는 요인 - 불필요한 상태 변화의 제거 - 텍스처 크기를 줄이면 가져올 픽셀도 줄어든다 - 오픈GL ES/JNI 메서드 호출의 제한 - 바인딩 정점 - 마무리하며 정리
08장 2D 게임 프로그래밍 기법
시작에 앞서 태초에 벡터가 있었다 - 벡터의 활용 - 간단한 삼각함수 이론 - Vector 클래스의 구현 - 간단한 사용 예제 간단한 2차원 물리 - 뉴턴과 오일러, 영원한 좋은 친구들 - 힘과 질량 - 이론적인 적용 - 실제 적용 충돌 감지와 2차원에서의 객체 표현 - 경계 도형 - 경계 도형의 구성 - 게임 객체의 어트리뷰트 - 광범위 충돌 감지와 미세 충돌 감지 - 적용 예제 2차원 카메라 - Camera2D 클래스 - 예제 텍스처 아틀라스: 공유는 관심이다 - 예제 텍스처 영역, 스프라이드, 배치: 오픈GL ES 숨기기 - TextureRegion 클래스 - SpriteBatcher 클래스 스프라이트 애니메이션 - Animation 클래스 - 예제 정리
09장 수퍼 점퍼 - 2D 오픈GL ES 게임
핵심 게임 방식 게임의 배경 이야기와 아트 스타일 화면과 화면 전환 게임 세계의 정의 자원의 생성 - UI 요소 - 비트맵 폰트를 활용한 텍스트 처리 - 게임 요소 - 텍스처 아틀라스 - 음악과 효과음 수퍼 점퍼 게임의 구현 - Assets 클래스 - Settings 클래스 - 메인 액티비티 - Font 클래스 - GLScreen - 메인 메뉴 화면 - 도움말 화면 - 하이스코어 화면 - 시뮬레이션 클래스 - WorldRenderer 클래스 최적화하기 또는 최적화하지 않기 정리
10장 오픈GL ES를 활용한 3D
시작에 앞서 3D의 정점 - Vertices3: 3D 위치의 저장 - 예제 시점 투영 - 가까이 있는 대상을 더 크게 z버퍼 - 혼란 속에 질서를 부여하다 - 이전 예제의 수정 - 블렌딩 - 뒤에 아무도 없다 - z버퍼의 정확도와 z 파이팅 3D 메시의 정의 - 큐브 - Hello World 3D - 예제 다시 살펴보는 매트릭스와 변형 - 매트릭스 스택 - 매트릭스 스택을 갖춘 계층적 시스템 - 간단한 나무상자 태양계 시스템 - 정리하기 - 간단한 카메라 시스템 정리
11장 3D 프로그래밍 트릭
시작에 앞서 3D에서의 벡터 오픈GL ES에서의 광원 - 광원의 적용 방식 - 광원 - 재료 - 오픈GL ES가 빛을 계산하는 방법 - 정점 법선 - 실제 적용 - 오픈GL ES의 광원 사용과 관련한 몇 가지 참고 사항 밉매핑 간단한 카메라 - 1인칭 카메라 또는 오일러 카메라 - 오일러 카메라 예제 - 관찰 카메라 모델의 로딩 - Wavefront OBJ 형식 - OBJ 로더의 구현 - OBJ 로더의 활용 - 모델 로딩과 관련한 참고사항 간단한 3D 물리 이론 3D에서의 충돌 감지와 객체 표현 - 3D에서의 경계 도형 - 경계 구의 충돌 검사 - GameObject3D와 DynamicGameObject3D 정리
12장 드로이드 인베이더 - 그랜드 파이널
핵심 게임 방식 배경 이야기와 아트 스타일 게임 화면과 화면 전환 게임 세계의 정의 자원의 생성 - UI 자원 - 게임 자원 - 음악과 효과음 접근 방법 Assets 클래스 Settings 클래스 메인 액티비티 메인 메뉴 화면 설정 화면 시뮬레이션 클래스 - Shield 클래스 - Shot 클래스 - 우주선 클래스 - 인베이더 클래스 - 세계 클래스 GameScreen 클래스 WorldRender 클래스 최적화 정리
13장 게임 배포
테스트에 대한 조언 개발자 등록 게임 APK 서명 마켓에 게임 배포 - 자원 업로드 - Listing Details - 배포 옵션 - 배포! - 마케팅 개발자 콘솔 정리
14장 이제 어디로?
게임의 소셜 연동 위치 기반 게임 멀티플레이어 기능 오픈GL ES 2.0 및 그 외 기능 프레임워크와 엔진 웹 자료 맺음말
이 책의 저자인 마리오 제흐너는 오픈소스 크로스플랫폼 게임 개발 솔루션인 libgdx의 주 개발자로서 누구보다도 게임 프레임워크를 만드는 법을 잘 설명할 수 있는 저자다. 이 책에서는 게임 개발의 기본이 되는 파일 입출력(I/O), 사용자 입력 처리, 그래픽, 오디오 등 각 프레임워크 요소를 추상화하고 실제 예제 코드를 통해 각 프레임워크 요소를 적절히 구현함으로써 재사용할 수 있는 게임 프레임워크를 완성하는 법을 보여준다. 또 게임 로직 구현에 도움이 되는 배경 지식에 대한 설명을 통해 충돌 감지, 비트맵 블리팅, 3D 그래픽 프로그래밍 같은 고급 주제를 차례로 소개한다.
『시작하세요! 안드로이드 게임 프로그래밍』은 안드로이드 게임 개발을 시작하는 데 필요한 모든 지식을 제공한다. 이 책에서는 먼저 기본적인 게임 설계 방식과 프로그래밍의 기본 이론을 다루고, 이어서 기본적인 게임 프레임워크를 만드는 법과 즐길 수 있는 자신만의 게임을 만드는 법을 점차적으로 설명한다. 이 책에는 독자들이 책의 내용을 확장해 자신만의 게임을 개발하는 데 필요한 정보가 모두 들어 있다.
<시작하세요! 안드로이드 게임 프로그래밍>은 안드로이드 플랫폼에서 멋진 게임을 만드는 전 과정을 차근차근 소개한다. 이 책에서 다루는 다음 주제들을 통해 독자는 손쉽게 자신만의 게임을 만들 수 있다.
★ 이 책의 내용
ㆍ안드로이드 개발 환경의 설정과 활용 - 기초적인 게임 개발 환경 설정 ㆍ전통적인 2D게임 프로그래밍 - 중독성 있는 액션 게임과 플랫폼 게임 개발 ㆍ안드로이드 그래픽과 오디오 - 게임에서의 화려한 그래픽 기법과 효과적인 오디오 활용 ㆍ게임 개발 기법 - 충돌 감지, 물리 이론, 스프라이트 애니메이션 활용 ㆍ3D 게임 프로그래밍 - 복잡한 3D를 게임에 손쉽게 적용 ㆍ게임 배포 - 게임 배포, 충돌 보고, 사용자 지원
안드로이드 게임 개발 세계에 입문한 것을 환영한다. 필자의 이름은 마리오다. 이제부터 필자는 이어질 14장에 걸쳐 여러분이 안드로이드 게임을 개발할 수 있게 도와주는 가이드가 돼줄 것이다. 이 책을 구매한 독자라면 안드로이드 게임 개발에 대해 배우려고 책을 구매했을 텐데 모쪼록 필자를 통해 여러분의 꿈을 실현할 수 있기를 바란다.
이 책에서는 다양한 주제를 다룬다. 안드로이드의 기본 원리, 오디오와 그래픽 프로그래밍, 약간의 수학과 물리 이론, 그리고 어렵게만 들리는 오픈GL ES 등이 우리가 다룰 내용이다. 이런 지식을 기반으로 이 책에서는 세 개의 각기 다른 게임을 개발한다. 그 중에는 물론 3D 게임도 들어 있다.
게임 프로그래밍은 여러분이 하고 있는 일을 제대로 알 때 비로소 쉬워진다. 그래서 이 책에서는 재사용하기 쉬운 코드를 제시하는 것뿐 아니라 게임 개발이라는 큰 그림을 보여줄 수 있는 형태로 책의 내용을 설명하려고 노력했다. 이런 내부 원리를 잘 이해해야만 복잡한 게임 아이디어를 제대로 공략할 수 있다. 이 책을 통해 독자들은 책에서 개발한 게임과 비슷한 게임뿐 아니라 웹이나 서점에서 추가로 얻은 지식을 바탕으로 새로운 게임 영역을 개발할 수 있을 만큼 충분한 기초 지식을 쌓을 수 있을 것이다.
▣ 책의 대상 독자
이 책은 우선 게임 프로그래밍 초급자를 대상으로 한다. 이 책의 독자는 게임 프로그래밍에 대한 사전 지식이 전혀 없어도 된다. 게임 프로그래밍에 대한 기본 지식은 이 책에서 모두 다루고 있다. 다만 이 책의 독자라면 자바에 대해 어느 정도 알고 있어야 한다. 자바 언어에 익숙지 않은 독자라면 브루스 에켈이 지은 『Thinking in Java(Prentice Hall, 2006)』의 온라인판을 읽어볼 것을 권한다. 이 책은 자바 언어에 대한 매우 훌륭한 입문서다. 자바 언어에 대한 기본 지식 외에 특별히 갖춰야 할 지식은 없다. 안드로이드나 이클립스를 몰라도 상관없다.
또 이 책은 안드로이드에서 게임을 개발하고자 하는 중급 게임 프로그래머를 대상으로 하는 책이다. 이런 독자에게는 책의 내용 중 일부가 이미 익숙하겠지만 이 책에서는 다양한 팁과 힌트를 소개하고 있으므로 많은 도움이 될 것이다. 안드로이드는 때때로 예상치 못한 방식으로 동작하기도 하는데, 이때 이 책의 내용이 크게 도움될 것이다.
▣ 이 책의 구성
이 책에서는 반복적인 접근 방식을 토대로 매우 기초적인 내용부터 하드웨어 가속을 활용한 고급 게임 프로그래밍까지 천천히, 하지만 확실히 소개한다. 이 책에서는 각 장을 통해 재사용할 코드 기반을 마련하므로 이 책을 순서대로 읽을 것을 권한다. 물론 경험이 많은 독자라면 자신이 확실히 알고 있는 장의 내용은 건너뛰어도 상관없다. 하지만 책의 내용을 건너뛰더라도 고급 주제를 다루는 절에서 해당 클래스와 인터페이스를 어떻게 사용하는지 이해할 수 있게끔 각 절의 코드 예제는 모두 읽어볼 것을 권한다. - 서문 중에서