Chapter 01 게임 디자인 모든 것을 시작하게 만든 게임 ... 30 그래서, 대단한 아이디어란 게 뭔데? ... 31 iPhone에 적합한 게임 ... 32 스토리 라인 ... 33 이름에 숨겨진 의미 ... 34 게임의 목표 ... 35 게임 플레이 요소 ... 36 시간 ... 36 생명 ... 37 체력 ... 37 오브젝트(Object) ... 38 문(門, Door) ... 39 무기 ... 40 엔티티(Entity) ... 40 플레이어(Player) ... 41 정리 ... 42 Chapter 02 Three Ts: Terminology, Technology, Tools Terminology ... 45 스프라이트(Sprite) ... 45 스프라이트 시트(Sprite Sheet) ... 47 애니메이션(Animation) ... 50 비트맵 폰트(Bitmap Font) ... 52 타일 맵(Tile Maps) ... 52 Particle System ... 54 충돌 감지(Collision Detection) ... 56 인공지능(AI; Artificial Intelligence) ... 57 게임 루프(Game Loop) ... 57 Technology ... 60 Objective-C ... 61 Cocoa Touch ... 61 OpenGL ES ... 62 OpenAL ... 66 Tools ... 67 iPhone SDK ... 38 정리 ... 75 Chapter 03 여정의 시작 Xcode 프로젝트 생성 ... 78 프로젝트 실행 ... 81 코드 분석 ... 82 Application Delegate ... 82 헤더파일 분석 ... 84 Implementation 파일 분석 ... 86 EAGLView ... 90 EAGLView.h ... 91 EAGLView.m ... 93 ES1Renderer ... 104 ES1Renderer.h 분석 ... 104 ES1Renderer.m 분석 ... 105 프레임버퍼(Framebuffer)와 렌더버퍼(Renderbuffer) 생성 ... 106 색깔 값 정의 ... 114 위치 ... 115 OpenGL 동작 원리 ... 117 모델 변환 ... 118 화면에 그리기 ... 119 정리 ... 123 Chapter 04 게임 루프 결론은 타이밍 ... 126 충돌 감지(Collision Detection) ... 128 게임 루프 ... 128 프레임 기반(Frame-Based) 게임 루프 ... 129 시간 기반 고정 간격(Time-Based, Fixed Interval) 게임 루프 ... 131 코드 분석 ... 133 EAGLView 클래스 ... 134 EAGLView.m 파일 ... 134 ES1Renderer 클래스 ... 138 View Port 설정 ... 142 게임 장면과 게임 컨트롤러 ... 144 게임 컨트롤러 생성 ... 144 GameController 클래스 ... 144 싱글톤(Singleton) 만들기 ... 147 GameController.m ... 148 AbstractScene 클래스 ... 152 GameScene 클래스 ... 154 정리 ... 157 연습문제 ... 157 Chapter 05 이미지 렌더링 렌더링(Rendering)이란? ... 160 사각형 그리기 ... 162 텍스처 매핑(Texture Mapping) ... 165 텍스처 좌표체계 ... 166 Interleaved Vertex Arrays ... 168 구조체(Structure) ... 171 이미지 렌더링 클래스 ... 173 Texture2D 클래스 ... 174 TextureManager 클래스 ... 186 ImageRenderManager 클래스 ... 189 Image 클래스 ... 198 초기화 ... 198 서브이미지(Sub-Image) 탐색 ... 203 이미지 복제 ... 204 이미지 렌더링하기 ... 204 Getter와 Setter ... 208 정리 ... 209 연습문제 ... 209 Chapter 06 스프라이트 시트(Sprite Sheet) 스프라이트 시트(Sprite Sheet) 소개 ... 212 단순 스프라이트 시트(Simple Sprite Sheet) ... 213 복합 스프라이트 시트(Complex Sprite Sheet) ... 214 Zwoptex 사용하기 ... 216 SpriteSheet 클래스 ... 218 초기화 ... 219 스프라이트 탐색 ... 223 PackedSpriteSheet 클래스 ... 224 초기화 ... 224 컨트롤 파일 파싱 ... 226 스프라이트 추출 ... 227 정리 ... 228 연습 문제 ... 229 Chapter 07 애니메이션(Animation) 애니메이션 프로젝트 ... 232 Animation 소개 ... 233 프레임 ... 234 State ... 234 Type ... 234 Direction ... 234 Bounce Frame ... 235 Animation 클래스 ... 235 초기화 ... 236 프레임 추가 ... 237 애니메이션 업데이트 ... 238 애니메이션 렌더링 ... 240 마무리 ... 241 정리 ... 244 연습문제 ... 244 Chapter 08 비트맵 폰트(Bitmap Fonts) 비트맵 폰트 프로젝트 ... 248 비트맵 폰트 소개 ... 249 비트맵 폰트용 스프라이트 시트 제작 ... 251 BitmapFont 클래스 ... 254 헤더 파일 ... 254 C로 하는 부분? ... 255 초기화 ... 255 컨트롤 파일 파싱 ... 256 텍스트 렌더링 ... 261 텍스트 정렬 방식 구현하기 ... 263 텍스트 폭과 높이 ... 265 Deallocation ... 267 정리 ... 267 연습문제 ... 268 Chapter 09 타일 맵(Tile Maps) 타일 맵 프로젝트 ... 270 타일 맵 소개 ... 271 타일 맵 에디터 ... 273 타일 팔레트(Tile Palette) ... 275 레이어(Layers) ... 275 타일 맵 제작 ... 276 새로운 타일 세트 생성 ... 277 맵 레이어(Map Layer) 생성 ... 279 오브젝트 레이어(Object Layer) 생성 ... 279 맵 그리기 ... 280 오브젝트 배치 ... 280 Tiled 프로그램 설정 파일 ... 281 Map 요소 ... 281 Tileset 요소 ... 282 Layer 요소 ... 283 Object Group 요소 ... 284 타일 맵 클래스 ... 285 Layer 클래스 ... 286 TileSet 클래스 ... 293 TiledMap 클래스 ... 295 초기화 ... 297 맵 파일 파싱 ... 299 레이어 이미지 생성 ... 311 레이어 렌더링 ... 312 타일 정보 얻기 ... 314 정리 ... 315 연습 문제 ... 315 Chapter 10 Particle Emitter Particle Emitter 프로젝트 ... 319 Particle System 개요 ... 320 Particle System 파라미터 ... 321 Particle의 Life Cycle ... 322 Particle 생성 ... 323 Particle 생존 ... 324 Particle 소멸 ... 325 다시 태어나는 Particle ... 325 Particle Emitter 설정 ... 326 Particle Emitter 클래스 ... 328 TBXMLParticleAdditions 클래스 ... 328 ParticleEmitter 클래스 ... 330 Particle system 즐기기 ... 345 정리 ... 347 Chapter 11 사운드(Sound) 사운드 프로젝트 ... 350 iPhone 사운드 시스템 ... 351 오디오 세션(Audio Session) ... 351 음악 재생 ... 353 사운드 효과 재생 ... 354 사운드 효과 제작 ... 356 스테레오와 모노 ... 358 사운드 매니저 클래스 ... 359 SoundManager 클래스 ... 360 사운드 효과 관리 ... 378 사운드 효과 로드 ... 379 사운드 효과 재생 ... 382 사운드 효과 재생 정지 ... 386 사운드 효과와 듣는 사람 위치 설정 ... 387 사운드 인터럽트 처리 ... 388 정리 ... 391 Chapter 12 User Input User Input 프로젝트 ... 394 User Input 소개 ... 396 터치 이벤트 ... 396 터치 이벤트 처리 ... 398 touchesBegan 메소드 ... 400 touchesMoved 메소드 ... 402 touchesEnded 메소드 ... 404 터치 횟수에 따른 처리 ... 405 가속도 이벤트 ... 407 정리 ... 409 Chapter 13 Game Interface Game Interface 프로젝트 ... 412 OpenGL ES 인터페이스 ... 413 인터페이스 렌더링 ... 414 버튼 영역 설정 ... 417 터치 처리 ... 418 화면전환 처리 ... 422 OpenGL ES 화면 방향 ... 423 UIKit 인터페이스 ... 427 인터페이스 생성 ... 428 인터페이스 연결 ... 431 UIKit Orientation ... 435 UIKit 인터페이스 보여주기/숨기기 ... 437 정리 ... 441 Chapter 14 게임 오브젝트와 엔티티 게임 오브젝트와 엔티티 프로젝트 ... 444 게임 오브젝트 ... 445 AbstractObject 클래스 ... 446 EnergyObject 클래스 ... 449 게임 엔티티(Game Entity) ... 458 AbstractEntity 클래스 ... 460 인공지능 ... 462 Player 엔티티 클래스 ... 465 게임 오브젝트 및 엔티티 저장 ... 476 정리 ... 479 Chapter 15 충돌 감지(Collision Detection) 충돌 감지에 대하여 ... 482 충돌 걸러내기 ... 483 프레임(Frame) 기반과 시간(Time) 기반 ... 485 AABB(Axis-Aligned Bounding Boxes) ... 486 충돌 검사 ... 487 Collision Map ... 489 엔티티와 맵 간 충돌 감지 ... 492 엔티티와 엔티티 간 충돌 감지 ... 493 정리 ... 495 Chapter 16 끝내기 카메라 ... 498 게임 상태 및 설정 저장 ... 501 게임 상태 저장 ... 501 게임 상태 읽어오기 ... 503 게임 설정 저장 ... 505 게임 설정 읽어오기 ... 506 점수 저장 ... 507 점수 추가 ... 510 최고 점수 저장 ... 511 최고 점수 읽어오기 ... 512 성능과 최적화 ... 513 Instruments 사용하기 ... 515 Leaks Instrument ... 516 OpenGL ES Instrument ... 520 Compiling for Thumb 옵션 ... 522 베타 테스트 ... 523 다양한 기기 형태 ... 524 피드백 ... 526 정리 ... 527