본문 바로가기

Cocos2d-x v3.17/입문하기

[Cocos2d-x 입문하기]Scene을 이해하기

반응형


Scene

게임개발 당신은 메인메뉴,스테이지,종료화면 등이 필요할수 있습니다.

어떻게 구성해야 할까요?바로 Scene 사용하는 겁니다.Scene을 바구니라고 생각하고 여러 객체를 담는겁니다.

당신이 좋아하는 영화를 생각해보세요.그 영화는 여러 배경과 여러 스토리라인으로 나뉘어져 있습니다.

이제 우린 이것과 같은 방식으로 개발할겁니다.

당신은 아마 쉽게 몇가지 Scene 생각해낼수 있을겁니다.

이제 익숙한 그림을 한번 봐보자.

이것은 메인메뉴의 Scene입니다.

Scene 많은 객체들이 모여서 만들었습니다.

모든 객체들을 하나의 Scene 담고 최종결과물이 나온겁니다.

Scene renderer 그립니다.renderer Sprite 다른 객체가 화면안에 렌더링하는것을 책임집니다.

과정을 이해하기 쉽게 우리는 Scene Graph라는것을 한번 이해 봅시다.


Scene Graph


Scene Graph  객체를 정렬한다고 표현하면 될것같다.

Scene Graph Scene안에 모든 Node 하나의 Tree 포함시킨다.(SceneGraph 그래프라고 하지만 실제로는 트리구조로 표현된다.

듣기엔 엄청 복잡해서 당신이 " 이런 세세한것까지 알아야 하냐,Cocos2d-x 이렇게 심도있게 공부해야 하는것이냐?"라고 물을수 있다.답은 "그렇다이다.

렌더러가 어떻게 씬을 렌더링하는지 이해하는게 중요하다.

 


게임을 개발할때 당신은 노드를 추가하여 Sprite Animation 하나의 씬에 넣는다면 당신이 원하는 그림이 정확한 위치에 그려져야 할것이다.


그런데 어떤것이 보이지 않는다면?당신이 실수하여 그림이 배경뒤로 숨어버린것이다.그럼 어떡할것인가?이것은 아주 사소한 문제다.일단 멈추고 종이를 꺼내서 당신이 원한 그림을 그려보라.그럼 당신은 간단하게 문제점을 찾을것이다.


SceneGraph 트리구조로 되어있다. 그럼 노드를 순회할수 있는것이다.Cocos2d-x 중위순회방식을 사용하여 좌측트리의 노드를 순회하고 마지막은 오른쪽 트리를 순회한다.아래 그림을 중위순회하면 A,B,C,D,E,F,G,H,I 순서를 얻을수 있다.

이제 씬그래프를 이해하였고 다음의 씬을 봐보자.

일단 어떤 요소가 있는지 눈으로 보자.객체는 트리형식의 우선순위대로 렌더링된다.

또 고민해봐야 할것은 z-order 마이너스인 요소이다.z-order 음수 되는 노드는 좌측트리에 놓여진다.


따라서 양수 노드는 오른쪽 트리에 놓여진다.실제로 개발하는 과정중에 당신은 원하는 순서대로 타겟을 추가하고 타겟은 당신이 지정한 z-order 자동정렬된다.

위에 그림을 봐보자.좌측의 씬은 많은 노드(객체) 구성되어있다.당신이 지정한 z-order 따라 중첩된다.


Scene.addChild() 메서드 씬그래프를 구성할수 있다.


C++

// Adds a child with the z-order of -2, that means
// it goes to the "left" side of the tree (because it is negative)
scene->addChild(title_node,
-2);

// When you don't specify the z-order, it will use 0
scene->addChild(label_node);

// Adds a child with the z-order of 1, that means
// it goes to the "right" side of the tree (because it is positive)
scene->addChild(sprite_node,
1);


렌더링할때 z-order 값이 제일큰 노드는 나중에 그려지고,제일작은 노드는 먼저그려진다.

만약 두개노드가 그려지는 곳이 중첩된다면 z-order값이 노드가 작은노드를 덮을것이다.

 

출처: <http://cocos2d-x.org/docs/cocos2d-x/zh/basic_concepts/scene.html>


반응형