Cocos2d-X中的菜单

在Cocos2d-X实现显示菜单的方式比较特殊,首先需要使用CCMenu创建一个菜单,然后使用CCMenuItem创建一个菜单项,实际上程序中显示的菜单是使用CCMenu和CCMenuItemFont共同作用的结果,在Cocos2d-X中CCMenu只是一个容器,需要使用CCMenuItemFont才能实现创建菜单

程序示例:创建一个简单的菜单

程序代码:

#include "Menu.h"

CCScene* Menu::scene()
{
    CCScene* scene = CCScene::create();
    
    Menu* layer = Menu::create();

    scene->addChild(layer);

    return scene;
}


bool Menu::init()
{
    //初始化父类层
    CCLayer::init();

    //得到窗口的尺寸
    CCSize winSize = CCDirector::sharedDirector()->getWinSize();

    //创建一个Menu(看不到效果,Menu只是一个容器)
    CCMenu* menu = CCMenu::create();

    //添加Menu
    addChild(menu);

    //创建一个MenuItem, 默认的Item位置就在中央
    CCMenuItemFont* item = CCMenuItemFont::create("This is item");

    //将MenuItem增加到Menu上
    menu->addChild(item1);

    return true;
}


执行结果:


程序示例:创建多个菜单,并且实现菜单响应事件

在Menu.h中添加下面的代码

#ifndef __Menu_H__
#define __Menu_H__

#include "cocos2d.h"
USING_NS_CC;

class Menu : public CCLayer
{
public:
     bool init();  

    static CCScene* scene();

    void menuHandler(CCObject*);

    CREATE_FUNC(Menu);
};

#endif // __HELLOWORLD_SCENE_H__


在Menu.cpp中添加下面的代码

#include "Menu.h"

CCScene* Menu::scene()
{
    CCScene* scene = CCScene::create();
    
    Menu* layer = Menu::create();

    scene->addChild(layer);

    return scene;
}


bool Menu::init()
{
    //初始化父类层
    CCLayer::init();

    //得到窗口的尺寸
    CCSize winSize = CCDirector::sharedDirector()->getWinSize();

    //创建一个Menu(看不到效果,Menu只是一个容器)
    CCMenu* menu = CCMenu::create();

    //添加Menu
    addChild(menu);

    //创建一个MenuItem, 默认的Item位置就在中央
    CCMenuItemFont* item1 = CCMenuItemFont::create("This is item1");

    //将MenuItem增加到Menu上
    menu->addChild(item1);

     //创建一个MenuItem, 默认的Item位置就在中央
    CCMenuItemFont* item2 = CCMenuItemFont::create("This is item2");

    //添加MenuItem
     menu->addChild(item2);

     //设置item2的位置
     item2->setPositionY(item1->getPositionY() - 100);

    //设置响应函数:当触摸到item时调用Menu::menuHandler
    //第一个参数:响应函数所在的对象
    //第二个参数:成员函数指针
    item1->setTarget(this,menu_selector(Menu::menuHandler));
    item2->setTarget(this,menu_selector(Menu::menuHandler));

    //设置菜单项的ID
    //item1的ID为1
    //item2的ID为2
    item1->setTag(1);
    item2->setTag(2);

    return true;
}

//响应菜单事件
void Menu::menuHandler(CCObject* obj)
{
    //将obj强制转换成菜单项类型
    CCMenuItemFont* item = (CCMenuItemFont*)obj;

    //得到菜单项的ID
    int tag = item->getTag();

    //判断用户点击了那个菜单
    if(1 == tag)
    { 
        MessageBox(NULL,TEXT("item1 is clicked !"),TEXT("MenuItem响应"),MB_OK);
    }
    else
    {
        MessageBox(NULL,TEXT("item2 is clicked !"),MB_OK);
    }
}


执行结果:



当单击“This is Item1”后:


当单击“This is Item2”后:



相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...