안드로이드 NDK 게임 개발 [현업에서 바로 활용할 수 있는 70가지 예제]
- 원서명Android NDK Game Development Cookbook (ISBN 9781782167785)
- 지은이세르게이 코사레브스키(Sergey Kosarevsky), 빅토르 라티포프(Viktor Latypov)
- 옮긴이박지유
- ISBN : 9788960778658
- 30,000원
- 2016년 05월 27일 펴냄 (절판)
- 페이퍼백 | 388쪽 | 188*235mm
- 시리즈 : acorn+PACKT, 게임 개발 프로그래밍
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
요약
C++를 이용해서 안드로이드 게임 개발을 시작하려는 프로그래머들에게 70가지가 넘는 실전적인 예제를 통해 안드로이드 NDK 게임 개발을 가이드 한다. 네트워크 접속, 파일 시스템, 그래픽, 오디오 스트리밍, 크로스플랫폼 UI, 입력 시스템 등 게임 개발에서 NDK가 활용될 수 있는 주요 기술들이 망라되어 있으며, 최종적으로는 이런 기술들을 총동원해서 3매치 퍼즐 게임과 그림 퍼즐 게임 등 2종의 게임을 제작해본다.
이 책에서 다루는 내용
인기 있는 C++ 라이브러리의 안드로이드 포팅
포팅 가능한 멀티스레드 코드 작성
OpenAL을 이용한 오디오 재생
제스처 인식 구현
프리타입을 이용한 텍스트 렌더링
OpenGL ES의 활용과 데스크톱에서 게임을 개발하기 위한 OpenGL ES 추상 레이어의 생성
데스크톱에서 모바일 애플리케이션의 디버깅
C++에서 플리커 및 피카사 웹 서비스 접근
모바일 게임 엔진 구현
이 책의 대상 독자
기존 C/C++ 애플리케이션을 안드로이드로 포팅하고 싶은가? 여러분은 최신의 모바일 개발 전선으로 뛰어들고 싶은 숙련된 C++ 개발자인가? 자바 기반 안드로이드 애플리케이션의 성능을 향상시키고 싶은가? C++로 작성된 멋진 라이브러리들을 자신의 안드로이드 애플리케이션에서 활용하고 싶은가? 모바일 게임을 PC에서 디버깅함으로써 생산성을 향상시키고 싶은가?
이들 질문 중 하나에라도 긍정적으로 답할 수 있다면, 이 책은 당신에게 적합하다.
이 책의 구성
1장, ‘빌드 환경 구축’에서는 안드로이드 SDK와 NDK를 마이크로소프트 및 우분투/데비안 리눅스에서 설치하고 환경 설정하는 방법과 안드로이드 기반 단말에서 첫 번째 애플리케이션을 빌드하고 실행하는 방법을 설명한다. 안드로이드 NDK에 포함된 다양한 컴파일러와 툴체인의 사용법을 살펴볼 것이며, adb 툴을 이용한 애플리케이션의 디버깅과 배포도 다뤄진다.
2장, ‘공통 라이브러리의 포팅’에는 프리타입 글꼴 렌더링 라이브러리, 프리이미지 이미지 로딩 라이브러리, libcurl과 OpenSSL(libsssl과 libcrypto 모음 포함), OpenAL API, libmodplug 오디오 라이브러리, Box2D 물리 라이브러리, 오픈 다이내믹스 엔진ODE, libogg, libvorbis 등 안정화된 C++ 프로젝트와 API를 안드로이드 NDK로 포팅하는 일련의 예제들이 포함되어 있다. 이들 중 일부는 소스 코드의 변경을 요구하며, 그런 변경사항들이 설명될 것이다. 이들 라이브러리는 대부분 나중에 이후의 장들에서 활용된다.
3장, ‘네트워킹’에서는 HTTP 프로토콜을 이용해 파일을 다운로드하기 위해 잘 알려진 libcurl 라이브러리를 이용하는 방법을 보여주고, 요청을 구성하고 C++ 코드를 이용해서 인기 있는 피카사나 플리커 온라인 서비스에서 받은 응답을 직접 파싱하는 방법을 보여준다. 요즘의 애플리케이션들은 대부분 어떤 방식이든 네트워크 데이터 전송을 사용한다. HTTP 프로토콜은 페이스북, 트위터, 피카사, 플리커, 사운드클라우드, 유튜브 등 인기 웹사이트에 필요한 API의 기반이 된다. 이 장의 나머지 부분에서는 웹 서버 개발을 중점적으로 다룬다. 애플리케이션에 미니 웹 서버를 내장시키면 운영체제 종속적인 코드를 사용하지 않고도 개발자가 소프트웨어를 원격으로 제어하고 애플리케이션의 런타임을 모니터링 할 수 있다. 이 장의 시작 부분에서는 백그라운드 다운로드 프로세스를 위한 태스크 대기열과 효율적인 스레드 간 데이터 교환을 가능하게 하는 간단한 스마트 포인터까지 소개한다. 이러한 스레딩 프리미티브는 나중에 4장, ‘가상 파일시스템 구성’과 5장, ‘크로스 플랫폼 오디오 스트리밍’에서 활용된다.
4장, ‘가상 파일시스템 구성’에서는 비동기 파일 처리, 자원 프록시, 자원 압축을 중점적으로 다룬다. 많은 프로그램들은 데이터를 파일 집합으로 저장한다. 전체 프로그램을 중단시키지 않고 이런 파일들을 로딩할 수 있느냐는 매우 중요한 이슈다. 최신 운영체제의 휴먼 인터페이스 지침들은 하나같이 애플리케이션 개발자들에게 프로그램의 흐름 도중에 어떠한 지연이나, ‘정지’(안드로이드에서는 애플리케이션이 응답하지 않음 오류(ANR, Application Not Responding)로 알려진)라도 발생하지 않게 하라고 규정한다. 안드로이드 프로그램 패키지는 단순히 .apk 확장자를 가진 압축 파일로서, 친숙한 ZIP 알고리즘으로 압축되어 있다. 애플리케이션의 리소스 파일을 .apk에서 바로 읽고 싶다면, zlib 라이브러리를 이용해서 .zip 형식의 압축을 풀어야 한다. 다뤄지는 또 다른 중요한 주제는 파일시스템 개념으로, 파일시스템은 하부 운영체제 파일과 폴더 구조를 추상화하고, 애플리케이션의 안드로이드와 PC 버전 간의 리소스 공유를 가능하게 해준다.
5장, ‘크로스 플랫폼 오디오 스트리밍’은 OpenAL 라이브러리를 이용한 오디오 스트림의 구성으로 시작한다. 이후 RIFF WAVE 파일 형식 읽기와 OGG 볼비스 스트림 디코딩으로 진행한다. 마지막으로는, libmodplug를 이용해서 일부 트래커 음악을 재생하는 방법을 배운다. 최근의 안드로이드 NDK에는 OpenSL ES API 구현이 포함되어 있다. 하지만 매끄러운 게임 디버깅 기능을 위해 우리는 PC와 모바일 플랫폼 간에서 완벽하게 포팅 가능한 구현을 찾고 있다. 이를 위해 OpenAL 구현을 정적 라이브러리로 사전 컴파일한 다음, 소규모 멀티스레드 사운드 스트리밍 라이브러리를 libogg와 libvorbis 상단에 구성한다.
6장, ‘OpenGL ES 3와 OpenGL 3의 통합’에서는 데스크톱 OpenGL 3와 모바일 OpenGLES 3.0을 위한 기본 렌더링 루프를 제시한다. 애플리케이션을 모바일 단말로 재 배포하는 과정은 긴 작업인 탓에 개발자들이 신속하게 기능을 테스트하고 디버깅하는 데 장애가 된다. PC상에서 게임 로직을 개발하고 디버깅할 수 있도록, 모바일 OpenGL ES에서 데스크톱 GLSL 셰이더를 이용하는 기법을 제공한다.
7장, ‘크로스 플랫폼 UI와 입력 시스템’에서는 포팅 가능한 방식으로 멀티터치 이벤트 핸들링과 제스처 인식을 구현하는 방법을 알려준다. 현재의 모바일이란 거의 제스처 기반의 터치 입력과 같은 말이다. 현대의 사용자 지향적인 애플리케이션에서는 그래픽 사용자 인터페이스GUI, Graphical User Interface를 빼놓을 수 없다. 상호작용을 구성하는 데는 두 가지 기본적 이슈가 있는데, 입력과 텍스트 렌더링이 그것이다. 추가로 테스트와 디버깅을 용이하게 하기 위해, 다중 마우스 장치를 가진 윈도우 7PC에서 멀티터치 입력을 시뮬레이션 하는 방법을 보여준다. 우리는 인터랙티브 게임 애플리케이션의 개발을 목표로 하고 있으므로, 익숙한 방법으로 사용자 입력을 구현해야 한다. 온스크린 게임패드 UI를 생성하는 방법을 체계적으로 보여주려고 한다. 글로벌 다문화 환경에서는, 어떤 애플리케이션이든지 다중 언어 텍스트 렌더러를 가지는 편이 바람직할 것이다. 프리타입 라이브러리를 이용해서 라틴(Latin) 문자, 키릴(Cyrillic) 문자, 왼쪽에서 오른쪽으로 가로쓰기 텍스트를 렌더링하는 방법을 보여주려고 한다. 다중 언어 UTF-8로 로컬라이즈된 인터페이스의 구성이 사전 기반의 접근법으로 제시될 것이다.
8장, ‘매치 3 게임 제작’에서는 이전에 소개한 모든 기법들을 총동원해서 간단한 매치 3게임을 제작하는데, 이 게임에는 OpenGL ES를 이용한 렌더링, 입력 처리, 리소스 포장, PC상에서의 디버깅 기법이 활용된다. 또한 이 게임은 윈도우 데스크톱 CP에서 실행 및 디버깅 가능하며 다른 모바일 플랫폼으로 손쉽게 포팅될 수 있다.
9장, ‘그림 퍼즐 게임 제작’에서는 위에서 언급된 모든 기법들을 통합해 좀 더 복잡한 예제를 선보인다. 그래픽이나 입력에 관해 위에서 언급된 모든 요소들은 네이티브 네트워크 라이브러리와 API를 이용해 피카사 온라인 서비스로부터 이미지를 다운로드할 것이다.
목차
목차
- 1장. 빌드 환경 구축
- 들어가며
- 윈도우에서 안드로이드 개발 툴 설치
- 리눅스에서 안드로이드 개발 툴 설치
- 애플리케이션 템플릿의 수동 생성
- 애플리케이션에 네이티브 C++ 코드 추가하기
- NDK 툴체인 전환
- 복수의 CPU 아키텍처 지원
- OpenGL ES를 이용한 기초적 렌더링
- 크로스 플랫폼 지원
- 크로스 플랫폼 코드의 통합
- 링크와 소스 코드 구조화
- 안드로이드 애플리케이션의 서명 배포
- 2장. 공통 라이브러리의 포팅
- 들어가며
- 윈도우용 네이티브 정적 라이브러리의 컴파일
- 안드로이드용 네이티브 정적 라이브러리의 컴파일
- libcurl 네트워킹 라이브러리의 컴파일
- OpenAL 라이브러리의 컴파일
- libvorbis, libmodplug, libtheora의 컴파일
- 프리이미지 그래픽 라이브러리 활용
- 텍스트 렌더링을 위한 프리타입 라이브러리 활용
- 물리 처리의 타이밍 구현
- 2D 그래픽 렌더링
- Box2D 시뮬레이션 설정
- ODE 물리 라이브러리의의 구축
- 3장. 네트워킹
- 들어가며
- 플리커와 피카사에서 사진 목록 가져오기
- 플리커와 피카사에서 이미지 다운로드
- 크로스 플랫폼 멀티스레딩 처리
- 네이티브 크로스 플랫폼 스레드의 동기화
- 참조 카운팅을 이용한 메모리 관리
- 비동기 태스크 대기열 구현
- 비동기 콜백 호출 처리
- 비동기적인 네트워크 처리
- 네트워크 주소 탐지
- HTTP 서버 제작
- 4장. 가상 파일시스템 구성
- 들어가며
- 파일 스트림 추상화
- 포팅 가능한 메모리 매핑 파일의 구현
- 파일 작성기 구현
- 인메모리 파일 다루기
- 마운트 포인트 구현
- zip 압축 파일 내의 파일 열거하기
- zip 압축 파일로부터 파일 압축 풀기
- 비동기적인 자원 로딩
- 애플리케이션 데이터의 저장
- 5장. 크로스 플랫폼 오디오 스트리밍
- 들어가며
- OpenAL 초기화와 .wav 파일 재생
- 기본 오디오 구성 요소의 추상화
- 사운드 스트리밍
- Ogg 볼비스 파일의 디코딩
- ModPlug를 이용한 트래커 음악의 디코딩
- 6장. OpenGL ES 3와 OpenGL 3의 통합
- 들어가며
- OpenGL 3 코어 프로파일과 OpenGL ES 2의 통합
- 윈도우에서 OpenGL 3 코어 프로파일의 초기화
- 안드로이드에서 OpenGL ES 2의 초기화
- GLSL 3와 GLES ES2 셰이더의 통합
- 지오메트리 조작
- 정점 배열의 통합
- 텍스처를 위한 포장자 생성
- 즉시 렌더링을 위한 캔버스 생성
- 7장. 크로스 플랫폼 UI와 입력 시스템
- 들어가며
- 안드로이드에서 멀티터치 이벤트 처리
- 윈도우에서 멀티터치 에뮬레이션 설정
- 윈도우에서 멀티터치 이벤트 처리
- 제스처 인식
- 온스크린 조이패드 구현
- 텍스처 렌더링을 위한 프리타입 활용
- 인게임 문자열의 로컬라이제이션
- 8장. 매치 3 게임 제작
- 들어가며
- 비동기 멀티터치 입력의 처리
- 오디오 재생 메커니즘의 개선
- 애플리케이션의 종료
- 메인 루프 구현
- 멀티플랫폼 게임 엔진 제작
- 매치 3 게임 제작
- 모양 관리
- 게임 필드 로직 관리
- 게임 루프 내에서 사용자 상호작용 구현
- 9장. 그림 퍼즐 게임 제작
- 들어가며
- 그림 퍼즐 게임 로직 구현
- 애니메이션 3D 이미지 선택기 구현
- 페이지 기반의 사용자 인터페이스
- 피카사 다운로더를 가진 이미지 갤러리
- 완전한 그림 퍼즐 게임의 구현