2015년 6월 8일 월요일

[Cocos2d-x] 메뉴

메뉴를 사용하려면 메뉴 아이템을 먼저 생성하고 메뉴에 추가해야 합니다. 메뉴 아이템을 생성할 수 있는 클래스는 여러가지가 있습니다. 필요에 맞게 골라서 사용하시면 됩니다.

  • MenuItemLabel
  • MenuItemAtlasFont
  • MenuItemFont
  • MenuItemSprite
  • MenuItemImage
  • MenuItemToggle
이중에서 MenuItemImage를 생성하려면 다음과 같이 하면 됩니다.

auto menuItem = MenuItemImage::create("normal.png", "pressed.png", 
CC_CALLBACK_1(HelloWorld::doClick, this)); // 평소 이미지, 눌렸을때 이미지, 눌렸을때 호출될 함수와 넘겨줄 인자 입니다.



doClick 함수는 없는 함수이므로 HelloWorldScene.h에 선언하고 HelloWorldScene.cpp에 구현해줘야 합니다.

// HelloWorldScene.h
class ...
{
...
void doClick(cocos2d::Object *sender);
}



// HelloWorldScene.cpp
...
void HelloWorld::doClick(Object *sender)
{
log("Menu is clicked"); // 메뉴를 누르면 디버그 창에 로그가 출력됩니다.
}


위와 같이 메뉴 아이템을 생성했으면 메뉴를 생성할수 있습니다.
auto menu = Menu::create(menuItem, NULL); // 여러개를 넣을수 있고 마지막은 NULL이어야 합니다.


아이템을 만들었으면 정렬을 하고 장면에 추가합니다.
menu->alignItemsVertically();
this->addChild(menu);

실행하면 가운데 메뉴 이미지가 보이고 클릭하면 디버그창에 로그가 출력될 것입니다.

위와 같은 방법으로 할때 메뉴가 여러개 있으면 콜백 함수를 메뉴마다 연결해야 하므로 함수를 메뉴 개수만큼 만들어야 합니다. 하지만 태그를 이용하면 모든 메뉴를 클릭했을때 한 하나의 콜백 함수로 처리할 수 있습니다.
bool HelloWorld::init()
{
...
auto menuItem1 = ...;
auto menuItem2 = ...;

menuItem1->setTag(1); // 메뉴 아이템에 태그를 지정합니다.
menuItem2->setTag(2);
...
}

void HelloWorld::doClick(Object *sender)
{
auto item = (MenuItem*)sender;
int i = item->getTag(); // 태그를 읽어와서 어떤 메뉴가 클릭되었는지 확인합니다.
log("%d th menu pressed", i);
}

댓글 없음:

댓글 쓰기