2023년 11월 20일 월요일

[cocos2d-x] 2d 게임엔진으로 플래피버드 클론 게임 만들기 (게임오버 처리-레이어를 활용하자)

 


★ 레이어(Layer) 개요

레이어는 다른 노드를 차일드로 갖는 컨테이너 역할을 합니다.

동시에 위치나 태그, 이름, 로테이트, z order 등 일반적인 노드와 비슷한 특성도 가집니다.

예를 들어 팝업창을 만든다고 하면

팝업창을 구성하는 요소 - 창, 메시지, 버튼 등이 필요한데

이것을 레이어 위에 올려서, 창을 닫아야 할 때 레이어만 remove하면 하위 칠드런도 한꺼번에 정리됩니다.

레이어는 복수로 겹칠 수 있기 때문에 게임 레이어-상점 레이어-구매확인 팝업 레이어 이런 식으로 구성할 수 있습니다.

레이어를 독립된 클래스로 만들면 다루기도 쉬울뿐더러, 공동 작업할 때에도 분담해서 작업할 수 있습니다.

이때 필요한 것이 std::function 을 사용한 사용자 정의 콜백입니다. 이것은 다음 강좌에서.

★ LayerColor

지정 색상으로 채워지는 배경을 갖는 LayerColor도 있습니다.

팝업창 레이어를 만들 때 하위 화면을 반투명으로 덮기 위한 용도 등으로 응용할 수 있습니다.

LayerColor를 상속하는 클래스를 만들기 위해서는 init 안에서

if(!Layer::init()) 부분을

if(!LayerColor::initWithColor(Color4B(0,0,0,160))) 처럼 바꿔주면 됩니다.

★ 레이어의 터치 삼키기 (Swallow)

예를 들어 상점 레이어가 있고, 구매할 것을 선택했을 때

'구매하시겠습니까? [예] [아니오]' 팝업을 띄울 수 있습니다.


이때 팝업의 버튼만 눌려야 하고 상점 레이어의 버튼이 눌리면 안됩니다.

이걸 막아주는 것을 터치 삼키기라고 하는데, 터치 이벤트에 setSwallowTouches(true)를 설정하여 막을 수 있습니다.

(따로 설정하지 않았을 때의 기본값은 false입니다)

이번 게임에서는 coocs2d-x의 기본 UI를 사용하지 않지만

레이어 전체에 터치 이벤트를 설정하지 않고 UI 버튼에만 이벤트가 설정된 경우, 터치 삼키기를 다른 방법으로 걸어줄 필요가 있습니다.



댓글 없음:

댓글 쓰기

[cocos2d-x] 2D 엔진으로 만드는 3D 슈팅게임

왜 2D 게임엔진으로 3D 게임 만들려고 삽질을 합니까?   예 뭐 3D 게임 만드는데 좋은 엔진은 아닙니다. 셰이더도 부실하고 물리엔진 쓰기도 까다롭고. 요즘은 외부업체 SDK 인트하기도 점점 힘들어지고.. ​ 그래도 기왕 해 본 거, 여기까지 왔으...