[D_004] Menu/MenuItemFont DATA_OLD/Cocos2d-x 기능성 게임 개발과정2014. 11. 14. 10:15
MenuItemFont는 스프라이트처럼 하나하나를 레이어에 추가시키는게 아니라, 만들어둔 아이템들을 'Menu'라는 클래스에 추가하여 생성한 뒤, 해당 메뉴를 레이어에 추가하는 것임.
즉, '스프라이트-레이어' 의 관계가 메뉴에서 '메뉴아이템-메뉴' 의 관계와 유사함.
auto item_01 = MenuItemFont::create("Play"); //play 아이템 생성
auto item_02 = MenuItemFont::create("Quit"); //quit 아이템 생성
auto menu = Menu::create(item_01, item_02, NULL); //두개의 아이템을 추가한 메뉴 생성
//NULL은 더이상 추가할 아이템이 없다는 것을 알려주는 역할
menu->alignItemsVertically(); //아이템들을 수직으로 자동 정렬
//menu->alignItemsVerticallyWithPadding(20);
//이렇게 패딩을 통해 아이템들 사이에 빈 공간을 채워서 여유를 줄 수 있다.
//이렇게 정렬을 안해주면, 두 아이템이 기본값으로 추가됐기때문에 겹치게 나옴
this->addChild(menu); //아이템이 아닌 메뉴를 레이어에 추가
+ 메뉴/메뉴 아이템의 기본 위치값(좌표/앵커포인트)
메뉴 아이템 클릭시 동작하게 만드는 함수 추가
void playCallback(Ref* sender);
void quitCallback(Ref* sender);
+ Ref* sender란?
위의 아무 동작 안하는 메뉴들 중, play를 수정해서 클릭시 동작하게끔 함수를 바꾼다.
auto item_01 = MenuItemFont::create("Play", CC_CALLBACK_1(HelloWorld::playCallback, this));
//this는 타겟. 여기서는 playCallback이 있는 HelloWorld가 된다.
//이렇게 바꿔줌을 통해, play를 클릭하면 playCallback함수가 호출된다.
//playCallback함수의 호출과 동시에 item_01자기 자신이 함수의 파라미터로 넘어간다.
//아이템에 해당된 함수는 클릭(터치)을 눌렀다가 뗄 시에 호출된다.
+ CC_CALLBACK_1이란?( CC_CALLBACK_n )
MenuItemFont는 말 그대로 font만 직접 입력하여 사용하는 것이기 때문에 다양한 활용도가 없다.
그래서 대신에 MenuItemLabel을 사용하면, 라벨을 이용하여 메뉴를 구성할 수 있다.
//라벨 아이템 생성
auto label_01 = Label::createWithBMFont("west_england-64.fnt", "PLAY");
auto item_01 = MenuItemLabel::create(label_01, CC_CALLBACK_1(HelloWorld::playCallback, this));
//메뉴에 추가하는 건 동일함
+메뉴별 callback을 menuCallback하나로 묶은 코드
'DATA_OLD > Cocos2d-x 기능성 게임 개발과정' 카테고리의 다른 글
[D_004] 토글을 이용한 메뉴 (0) | 2014.11.14 |
---|---|
[D_004] 리소스를 이용한 메뉴 만들기(이미지/스프라이트) (0) | 2014.11.14 |
[D_003] 텍스트 출력 - 라벨, 텍스트 (0) | 2014.11.13 |
[D_003] Z order 이용 관련 (0) | 2014.11.13 |
[D_003] Sprite 실습 (0) | 2014.11.13 |