게임 개발자로서는 고도를 사용했을 때 얻을 수 있는 이득이 많다. 우선 상업적 라이선스의 제약을 받지 않기 때문에 게임을 배포하는 방식과 분야를 완전히 제어할 수 있다. 대다수 상용 게임 엔진은 제작할 수 있는 프로젝트 유형을 제한하거나 도박 등 특정 장르의 게임을 제작하는 데는 훨씬 더 비싼 라이선스를 요구한다. / 고도가 오픈 소스라는 점은 상업용 게임 엔진과는 비교할 수 없는 수준의 투명성이 있다는 뜻이기도 하다. 예를 들어 특정한 엔진 기능이 사용자의 요구 사항에 맞지 않는다는 것을 알게 되면 엔진 자체를 자유롭게 수정해서 필요한 새 기능을 추가할 수 있으며, 이 과정에서 허락을 받을 필요도 없다. 또한 엔진의 내부 작동에 대한 완전한 접근 권한이 있으므로 대규모 프로젝트를 디버깅할 때 매우 유용할 수 있다. (6쪽)
파이썬처럼 GDScript도 동적 타입 언어다. 이는 변수를 생성할 때 타입을 선언할 필요가 없다는 뜻이다. 또한 공백(들여쓰기)을 사용해 코드 블록을 나타낸다. 전체적으로 봐서 GDScript를 게임 로직에 사용했을 때의 장점은, 엔진과 긴밀하게 통합되어서 코드 작성량이 적다는 점이다. 이는 그만큼 개발이 빨라지고 실수를 수정할 일도 줄어든다는 뜻이다. / GDScript가 어떤 모습인지 개념을 잡을 수 있게 다음 예제 코드를 준비했다. 스프라이트를 정해진 속도로 화면 왼쪽에서 오른쪽으로 움직이는 짧은 스크립트다. (15~16쪽)
플레이어가 동전이나 장애물에 부딪혔을 때는 이를 감지해야 하지만, 아직 이런 오브젝트를 만들지 않았다. 하지만 괜찮다. 고도의 시그널 기능을 사용하여 만들 수 있다. 시그널은 노드가 메시지를 보내서 다른 노드가 감지하고 반응할 수 있게 하는 방법이다. 대다수 노드에는 이벤트(바디가 충돌하거나 버튼이 눌리는 등)가 발생했을 때 이를 알려주는 시그널이 내장되어 있다. 또한 여러분의 목적에 맞게 커스텀 시그널을 정의할 수도 있다. / 시그널은 이 시그널을 수신하려는 노드에 연결해 사용한다. 연결은 인스펙터 창이나 코드에서 할 수 있다. 이 프로젝트 후반에 2가지 방법으로 시그널을 연결하는 방법을 배울 것이다. (32쪽)
그런데 지금 게임을 실행하면 문제가 하나 있다. 모든 노드가 일시 정지되고, Main도 거기 포함된다는 것이다. 즉, 더 이상 _input()을 처리하지 않으므로, 입력을 다시 감지해 일시 정지를 해제할 수 없다. 이 문제를 해결하려면 Main 노드의 Process/Mode를 Always로 설정하자.
일시 정지 기능은 알아두면 매우 유용하다. 어떤 게임에서든 이 기법을 사용할 수 있으므로, 이 기능을 다시 검토하며 작동 방식을 이해했는지 확인하자. (91쪽)
게임을 다시 플레이하면 공격적인 상대 외계인과 전투를 벌이게 될 것이다. 모든 콜리전 조합이 처리되고 있는지 확인하자(플레이어가 적 총알에 맞을 때를 제외하고). 적의 총알이 바위에 막힐 수 있다는 점에도 주목하자. 따라서 바위 뒤에 숨어 엄폐할 수도 있다. / 이제 게임에 적들이 생겨서 훨씬 더 도전적이다. 그래도 너무 쉽다면 적의 출현 빈도, 피해량, 파괴하는 데 필요한 사격 횟수 등 적의 속성을 증가시켜보자. (99쪽)
움직이는 플랫폼은 레벨 디자인 툴킷에 추가하기 좋은 재미 요소다. 이 절에서는 레벨의 아무 곳에나 배치하고 이동과 속도를 설정할 수 있는 움직이는 플랫폼을 만들어보겠다. / 새 씬을 시작하고 Node2D를 루트 노드로 추가해서 이름을 MovingPlatform으로 바꾼다. 씬을 저장하고 TileMap을 자식으로 추가한다. 플랫폼 아트는 모두 스프라이트 시트에 있으며 이미 타일로 분할되고 콜리전이 추가된 상태이므로 플랫폼을 그리기는 쉽다. Tile Set에 tiles_world.tres를 추가한다. Collision Animatable 상자도 사용으로 체크해야 한다. 그래야 이동 중에도 콜리전이 제대로 작동한다. (157쪽)