본문 바로가기

카테고리 없음

[cocos2d-x]기억력 카드게임 - 메뉴화면구현


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 정식 버전으로는 국내에서 첫 출간되는 책이...
가격비교