달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

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하나로 묶은 코드


:
Posted by 웽웽