MenuScene.h
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 | #ifndef __MENU_SCENE_H__ #define __MENU_SCENE_H__ #include "cocos2d.h" USING_NS_CC; //using namespace cocos2d의 줄임말 #define TAG_MENUITEM_PLAY 0 #define TAG_MENUITEM_HELP 1 #define TAG_MENUITEM_OPTION 2 #define TAG_MENUITEM_QUIT 3 //메뉴 별로 구분을 위해 태그 값을 정의 class MenuScene : public Layer { public: static Scene* createScene(); virtual bool init(); CREATE_FUNC(MenuScene); void initBG(); //메뉴화면에 배경을 생성하는 메소드 void initMenu(); //메뉴를 생성하는 메소드 void menuCallback(Ref *sender); //메뉴 아이템을 선택 했을 때 호출 되는 메소드 }; #endif | cs |
MenuScene.cpp
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #include "MenuScene.h" Scene* MenuScene::createScene() { auto scene = Scene::create(); auto layer = MenuScene::create(); scene->addChild(layer); return scene; } bool MenuScene::init() { if (!Layer::init()) { return false; } initBG(); initMenu(); return true; } void MenuScene::initBG() { auto spr = Sprite::create("menu/menu-bg.png"); spr->setPosition(Point(Director::getInstance()->getWinSize().width / 2, Director::getInstance()->getWinSize().height / 2)); this->addChild(spr); } void MenuScene::initMenu() { auto item_0 = MenuItemImage::create("menu/play-0.png", "menu/play-1.png", CC_CALLBACK_1(MenuScene::menuCallback, this)); //이미지파일은 일반 상태와 선택 되었을때 상태 2가지로 사용되었고 선택했을경우 menuCallback()메소드 실행 auto item_1 = MenuItemImage::create("menu/help-0.png", "menu/help-1.png", CC_CALLBACK_1(MenuScene::menuCallback, this)); auto item_2 = MenuItemImage::create("menu/option-0.png", "menu/option-1.png", CC_CALLBACK_1(MenuScene::menuCallback, this)); auto item_3 = MenuItemImage::create("menu/quit-0.png", "menu/quit-1.png", CC_CALLBACK_1(MenuScene::menuCallback, this)); item_0->setTag(TAG_MENUITEM_PLAY); item_1->setTag(TAG_MENUITEM_HELP); item_2->setTag(TAG_MENUITEM_OPTION); item_3->setTag(TAG_MENUITEM_QUIT); auto menu = Menu::create(item_0, item_1, item_2, item_3, NULL); //4가지 메뉴를 설정, 마지막에는 꼭 NULL값을 넣을 것! menu->alignItemsVerticallyWithPadding(20); //각 메뉴의 간격을 20픽셀로 설정 VERTICALLY이므로 세로 간격 this->addChild(menu); } void MenuScene::menuCallback(Ref *sender) { auto item = (MenuItem*)sender; //menuCallback()메소드에서 매개변수로 받은 sender를 가지고 item으로 재지정 switch (item->getTag()) { case TAG_MENUITEM_PLAY: { //auto scene = TransitionFadeTR::create(1.0, GameScene::createScene()); //Director::getInstance()->replaceScene(scene); } break; case TAG_MENUITEM_HELP: break; case TAG_MENUITEM_OPTION: break; case TAG_MENUITEM_QUIT: Director::getInstance()->end(); #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) exit(0); #endif break; default: break; } } | cs |
기본적인 메뉴 구성으로 다른 게임 제작시에도 응용하여 사용할 수 있을 것 같다.
Cocos2d-x 3 모바일 게임 프로그래밍
- 저자
- 인자건 지음
- 출판사
- 에이콘출판 | 2014-05-30 출간
- 카테고리
- Cocos2d-x 3 모바일 게임 프로그래밍
- 책소개
- 코코스2d-x 3.0 정식 버전으로는 국내에서 첫 출간되는 책이...