
★ 레이어(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 버튼에만 이벤트가 설정된 경우, 터치 삼키기를 다른 방법으로 걸어줄 필요가 있습니다.
at 2022/08/12 07:56
덧글