cocos2d 구조

1 minute read


연극 무대의 연출

cocos2d-x를 포함한 여러 게임 엔진들은 게임을 만드는 과정을 무대를 연출하는 것과 비슷한 구성으로 만들었다. 만드는 과정뿐만 아니라 몇 몇의 용어들에서 그 이유를 알 수 있다. 무대는 감독의 관리하에 배우와 소품들로 이루어진 여러개의 장면들이 이어진 것이다.

게임도 마찬가지로 여러 장면들 안에는 다양한 요소들이 들어가 있고 이 장면들을 이어붙인게 하나의 게임으로 표현된다.


Node

cocos2d-x의 모든 클래스는 Node를 상속받는다. Node클래스에는 다양한 프로퍼티가 있으며 대표적으로 위치, 색상, 투명도, 크기, 회전, 가시성 여부, 카메라, 그리드 등이 있으며 이들 프로퍼티는 필요에 따라 변경하는 것이 가능하다.

Node의 다른 중요한 특징은 자식 노드를 가질 수 있다는 것이다. Node클래스는 다른 노드에 대해서 컨테이너처럼 사용하는 것이 가능하고 이는 객체들의 계층 구조를 만들 때 유용하다.


Director

Director클래스는 싱글톤 클래스로 하나의 애플리케이션에 단 하나의 인스턴스만 존재한다. 게임 화면을 장면 단위인 Scene으로 구성해서 처리할 수 있는 기능을 제공하는데 이 기능으로 게임의 전체적은 흐름을 관리할 수 있다.


Scene, Layer

일반적으로 게임은 여러 장면들의 모임으로 이루어진다. 타이틀 장면, 도움말, 게임 플레이, 게임오버 등 이런 각 장면들이 Scene으로 관리되며 각 Scene은 자식으로 sprite, label, menu 등의 클르스 객체를 자식으로 가질 수 있으며 이것들로 화면을 구성하고 Director가 이 장면들을 조합해 게임을 만든다고 보면된다.

Layer는 Scene보다 하위 개념으로 Scene에서 갖는 자식들을 동일하게 가질 수 있다. 차이점은 Scene에서는 사용자의 터치 이벤트나 Accelerometer 같은 입력 역시 수신해서 처리할 수 없기 때문에 이런 이벤트 처리를 필요로하는 경우 Layer에서 담당하여 Scnene으로 넘기는 방식이다.

그렇다면 전체적인 게임의 구조는 이렇게 나온다.

cocos_class_struct


Sprite

위 director, scene, layer는 추상적 개념의 클래스라면 sprite는 실제로 화면에 출력하는 것으로 구체적인 개념의 클래스이다.

sprite 단어 자체의 뜻은 화면을 구성하는 정적인 이미지나 동적인 애니메이션의 프레임 이미지를 가리킨다.

sprite 클래스는 이런 이미지파일의 로딩과 화면 출력에 관련한 다양한 메서드를 제공한다.


Action

스프라이트의 애니메이션 처리를 위해서 액션 클래스를 제공한다. 액션 클래스는 Node 클래스를 상속한 모든 클래스의 애니메이션을 처리할 수 있지만 대부분은 스프라이트 클래스의 애니메이션 처리에 사용된다.

회전 반전 등 다양한 액션이 있고 대부분 By와 To 두 가지 큰 종류로 나뉘는데 By는 현재 값에서 지정한 값으로 To는 지정한 값으로 변하는 액션을 수행한다.

그리고 대부분의 액션에는 reverse 메서드가 있는데 현재 동작의 반대로 시작하는 새 액션을 수행한다.