Cocos2d-X中的菜单

Posted cynchanpin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 !"), TEXT("MenuItem响应"), MB_OK);
    }
}


运行结果:

技术分享


当单击“This is Item1”后:

技术分享


当单击“This is Item2”后:

技术分享

??







以上是关于Cocos2d-X中的菜单的主要内容,如果未能解决你的问题,请参考以下文章

Cocos2d-X中Menu的综合运用

Cocos2d-X中实现菜单特效

Cocos2d-x开发实例介绍特效演示

Cocos2d-x文本菜单

cocos2d-x实战 C++卷 学习笔记--第4章 使用菜单

标签菜单android - 不正确的调用片段