[목 차]
베타리더 후기 ix
오프닝 xi
학습 가이드 xiv
로드맵 xvi
PART I 기초 이론
LEVEL 1 플레임 엔진이란? 3
1.1 플레임 엔진을 선택해야 하는 이유 4
1.2 플러터와 다트 언어의 장점 6
1.3 개발에 들어가기 앞서 8
1.4 윈도우 환경에서 플러터 설치 9
__1.4.1 비주얼 스튜디오 코드 설치 9 / 1.4.2 플러터 설치 10
1.5 게임 개발의 시작 13
__1.5.1 VS Code에서 실행 13 / 1.5.2 플레임 게임 구조 16 / 1.5.3 객체지향 19 / 1.5.4 플레임 설치 23 / 1.5.5 텍스트 출력 24
리플레이 26 / QUIZ 26
LEVEL 2 플레임 엔진의 사용 방식 27
2.1 main() 함수 28
__2.1.1 컴포넌트 30 / 2.1.2 PositionComponent 31 / 2.1.3 TextComponent 31 / 2.1.4 SpriteComponent 37 / 2.1.5 TextComponent와 SpriteComponent 동시에 나타내기 40 / 2.1.6 SpriteButtonComponent 44
2.2 이벤트버스 46
__2.2.1 코드 예제 46
2.3 버튼 만들기 52
__2.3.1 버튼에 이벤트버스 넣기 58 / 2.3.2 텍스트 버튼 준비 59 / 2.3.3 이미지 색상 교체 62 / 2.3.4 NineTileBoxComponent 66
2.4 효과 만들기 72
__2.4.1 이동 효과 72 / 2.4.2 회전 효과 75
2.5 간단한 계산 과정 78
__2.5.1 벡터의 정규화 81 / 2.5.2 스케일 효과 84 / 2.5.3 투명 효과 85 / 2.5.4 순차 실행 86 / 2.5.5 동시 실행 87
리플레이 89 / QUIZ 89
LEVEL 3 게임 초기 화면 개발 91
3.1 게임 화면 구성 기법 92
__3.1.1 타이틀 화면과 메인 화면 92 / 3.1.2 이벤트버스 98 / 3.1.3 메인 페이지 101
3.2 다양한 해상도에서의 비율 유지: 카메라와 뷰포트 활용 112
__3.2.1 카메라와 뷰포트의 개념 112 / 3.2.2 월드 만들기 113 / 3.2.3 main 함수 114 / 3.2.4 변경된 구조 115
3.3 메뉴 팝업 131
__3.3.1 팝업 배경 클래스 131 / 3.3.2 팝업 133 / 3.3.3 팝업 그림자 효과 139
리플레이 142 / QUIZ 143
PART 2 실전 게임 개발
LEVEL 4 두더지 잡기 게임 개발 147
4.1 프로젝트 생성 148
4.2 이미지 출력 151
4.3 월드와 이벤트버스 155
4.4 윈도우 환경에서의 창 크기 조절 158
4.5 게임 타이틀 화면 160
__4.5.1 PaintTextComponent 클래스 165 / 4.5.2 수정한 타이틀 화면 167
4.6 메인 메뉴 페이지 169
__4.6.1 타이틀 텍스트 만들기 172 / 4.6.2 시작 버튼 만들기 174 / 4.6.3 이벤트버스 붙이기 181
4.7 게임 페이지 183
__4.7.1 게임 규칙 183 / 4.7.2 리소스 확보 183 / 4.7.3 게임 페이지 구현하기 185 / 4.7.4 구멍 이미지를 반으로 나누기 189 / 4.7.5 땅 아래에서 올라오기 194 / 4.7.6 두더지 객체 만들기 208 / 4.7.7 해머 구현 214 / 4.7.8 타격 효과 219 / 4.7.9 게임 UI 구성하기 222 / 4.7.10 다양한 두더지 만들기 247
4.8 마무리 260
리플레이 261 / QUIZ 262
LEVEL 5 땅파기 게임 265
5.1 프로젝트 생성 266
5.2 두더지 게임에서 사용했던 컴포넌트의 재활용 268
__5.2.1 이벤트버스 268 / 5.2.2 GameRectButton 270 / 5.2.3 PaintTextComponent 270 / 5.2.4 NumberDisplay 270 / 5.2.5 RoundedRectangleComponent 270 / 5.2.6 GameFunction 270
5.3 새로운 월드와 카메라 272
__5.3.1 카메라 컴포넌트 272 / 5.3.2 월드 273 / 5.3.3 main 함수 274 / 5.3.4 타이틀 화면 276 / 5.3.5 메인 화면 278 / 5.3.6 게임 페이지 283
5.4 마무리 357
리플레이 358 / QUIZ 359
LEVEL 6 벽돌 깨기 게임 363
6.1 구현할 대상 364
__6.1.1 Ball(공) 364 / 6.1.2 Paddle(막대) 364 / 6.1.3 Brick(벽돌) 364 / 6.1.4 Wall(벽) 364
6.2 프로젝트 생성 365
6.3 월드 생성 366
__6.3.1 타이틀 페이지 367 / 6.3.2 메인 페이지 371
6.4 flame_forge2d의 사용 375
__6.4.1 물리 엔진의 구성 375
6.5 게임 페이지 380
__6.5.1 카메라 컴포넌트 만들기 382 / 6.5.2 공 385 / 6.5.3 벽 설치 390 / 6.5.4 막대 설치 394 / 6.5.5 벽돌 398 / 6.5.6 남은 것 405 / 6.5.7 게임 클리어 페이지 409 / 6.5.8 벽돌 파괴 효과 413 / 6.5.9 게임 클리어 이벤트 419
6.6 마무리 421
리플레이 422 / QUIZ 423
LEVEL 7 디펜스 게임 427
7.1 타이틀 이미지 428
7.2 뼈대 잡기 430
7.3 타이틀 페이지 432
7.4 이벤트버스 434
__7.4.1 이벤트버스 사용하기 435
7.5 메인 메뉴 페이지 438
7.6 게임 페이지 441
__7.6.1 배경 이미지 이어붙이기 446 / 7.6.2 구름 만들기 449 / 7.6.3 주인공 캐릭터 배치 452 / 7.6.4 총알 456 / 7.6.5 적 구현 469 / 7.6.6 총알과 적의 충돌 구현 473 / 7.6.7 아이템 483 / 7.6.8 HP Bar 492 / 7.6.9 패배 500
7.7 마무리 503
리플레이 504 / QUIZ 505
LEVEL 8 AI 도구 활용 509
8.1 게임 개발에 AI 사용하기 510
__8.1.1 배경음악 510 / 8.1.2 효과음 510 / 8.1.3 애니메이션 511 / 8.1.4 스토리 511
8.2 미드저니와 소라 그리고 나노 바나나 512
__8.2.1 예술 작업실 만들기 514 / 8.2.2 각 AI의 역할 정의 514
8.3 게임 리소스에 나노 바나나 활용 518
__8.3.1 캐릭터 원화 518 / 8.3.2 게임 GUI 520
에필로그: 마치며 523
찾아보기 524
[본 문]
플레임 엔진은 바로 이 플러터의 크로스 플랫폼 기반 위에서 동작합니다. 즉, 우리가 플레임으로 게임을 개발하면 앱스토어, 구글 플레이, 웹, 데스크톱(스팀 포함)까지 다양한 플랫폼에 부담없이 출시할 수 있습니다. 플러터의 강력한 범용성과 플레임의 간단하고 직관적인 구조가 결합되어, 하나의 프로젝트로 여러 플랫폼에 대응하는 게임을 쉽게 만들 수 있게 되는 것입니다. (6쪽)
프레임은 현재 플레이어가 어떤 상태에 있는지, 즉 어느 신(scene)에 위치해 있는지를 파악하고, 행동에 따라 화면을 전환하는 역할을 수행합니다. 신은 게임에서 사용하는 하나의 개념으로, 게임의 주요 ‘장면’ 또는 ‘상태’를 구성하는 컴포넌트들의 집합을 의미합니다. 게임은 한 번에 하나의 신만 화면에 표시하며, 플레이 진행에 따라 서로 다른 신으로 전환됩니다. (17쪽)
이처럼 유닛이라는 형상 안에 다양한 형상이 들어갈 수 있다고 하여 다형성이라고 합니다. 이런 식으로 만들면, 여러 프로그래머와 함께 협업하여 각자의 유닛을 만들 수 있습니다. / 현재 자신이 보병 객체를 만든다고 하면, 유닛에 미리 만들어진 함수를 상속받아 구현만 하면 되니 기병과 창병 객체가 무슨 동작을 하는지 알 필요가 없습니다. 또한 이동 명령만 내리면 동작하니, 각자 유닛에 명령을 내리는 프로그래머도 내부 구현을 신경 쓰지 않아도 됩니다. (23쪽)
상태 관리는 게임의 현재 상태(메뉴 화면, 게임 플레이, 일시정지, 게임 오버 등)를 추적하고 관리하는 프로세스를 의미합니다. 이는 게임의 로직을 분명하게 정의하고, 어떤 상황에서 어떤 컴포넌트가 활성화되어야 하는지, 게임이 어떻게 반응해야 하는지 결정하는 데 중요합니다. (46쪽)
본격적인 게임 개발에 들어가기 전에, 게임에서 공통적으로 사용되는 타이틀 화면, 메뉴 화면 등을 먼저 살펴보겠습니다. 이러한 요소들은 대부분의 게임에서 필수로 사용되며, 앞으로 나올 게임 개발 과정에서도 이 장에서 만든 예제를 기반으로 확장해나갈 것입니다. / 우선, 게임 로고를 만들어보겠습니다. 여기서는 미드저니를 사용해 로고 이미지를 생성하겠지만, 여러분은 AI를 활용해 마음에 드는 로고를 자유롭게 만들어 사용하면 됩니다. (92쪽)