• 시작하세요! 안드로이드 게임 프로그래밍

  • 마리오 제흐너 지음
  • 유윤선 옮김

  • 게임 개발 시리즈 _ 001
  • ISBN: 9788992939867
  • 36,000원 | 2011년 09월 30일 발행 | 832쪽



이 책의 저자인 마리오 제흐너는 오픈소스 크로스플랫폼 게임 개발 솔루션인 libgdx의 주 개발자로서 누구보다도 게임 프레임워크를 만드는 법을 잘 설명할 수 있는 저자다. 이 책에서는 게임 개발의 기본이 되는 파일 입출력(I/O), 사용자 입력 처리, 그래픽, 오디오 등 각 프레임워크 요소를 추상화하고 실제 예제 코드를 통해 각 프레임워크 요소를 적절히 구현함으로써 재사용할 수 있는 게임 프레임워크를 완성하는 법을 보여준다. 또 게임 로직 구현에 도움이 되는 배경 지식에 대한 설명을 통해 충돌 감지, 비트맵 블리팅, 3D 그래픽 프로그래밍 같은 고급 주제를 차례로 소개한다.

『시작하세요! 안드로이드 게임 프로그래밍』은 안드로이드 게임 개발을 시작하는 데 필요한 모든 지식을 제공한다. 이 책에서는 먼저 기본적인 게임 설계 방식과 프로그래밍의 기본 이론을 다루고, 이어서 기본적인 게임 프레임워크를 만드는 법과 즐길 수 있는 자신만의 게임을 만드는 법을 점차적으로 설명한다. 이 책에는 독자들이 책의 내용을 확장해 자신만의 게임을 개발하는 데 필요한 정보가 모두 들어 있다.

<시작하세요! 안드로이드 게임 프로그래밍>은 안드로이드 플랫폼에서 멋진 게임을 만드는 전 과정을 차근차근 소개한다. 이 책에서 다루는 다음 주제들을 통해 독자는 손쉽게 자신만의 게임을 만들 수 있다.

★ 이 책의 내용

  • 안드로이드 개발 환경의 설정과 활용 - 기초적인 게임 개발 환경 설정
  • 전통적인 2D게임 프로그래밍 - 중독성 있는 액션 게임과 플랫폼 게임 개발
  • 안드로이드 그래픽과 오디오 - 게임에서의 화려한 그래픽 기법과 효과적인 오디오 활용
  • 게임 개발 기법 - 충돌 감지, 물리 이론, 스프라이트 애니메이션 활용
  • 3D 게임 프로그래밍 - 복잡한 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장 게임 개발자를 위한 안드로이드
    • 안드로이드 애플리케이션의 정의 - 매니페스트 파일
      • <manifest> 엘리먼트
      • <application> 엘리먼트
      • <activity> 엘리먼트
      • <uses-permission> 엘리먼트
      • <uses-feature> 엘리먼트
      • <uses-sdk> 엘리먼트
      • 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 클래스(들)
    • 하이스코어 화면
      • 숫자 렌더링: 짧은 여행
      • 화면 구현
    • 추상화...
      • 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 및 그 외 기능
    • 프레임워크와 엔진
    • 웹 자료
    • 맺음말
  • 333쪽, 식은 다음과 같이 수정합니다.

    pixelX = (norX 1)/2 * viewportWidth 뷰포트 좌측 상단의 x 좌표

    pixelY = (norY 1)/2* viewportHeight 뷰포트 좌측 상단의 y 좌표

  • 529쪽, 3번째줄

    320x380 픽셀 --> 320x480 픽셀

예제코드 관련 GitHub 페이지

관련 자료