cocos2d-x初学笔记03:菜单Menu

         下面介绍一下cocos2d-x中菜单的使用方法,从示例项目TestCpp中的MenuTest可以看到菜单的各种复杂多样的用法,但这里我们只学习最简单的文本菜单和图片菜单。

       (注意:我使用的cocos2d-x版本是2.0.4,系统是win7)下载地址

       我们在HelloWorld布景中创建两个菜单,分别为文本类型和图片类型,点击菜单后在输出台输出点击菜单的类型,好了,让我们一步一步的进行。

       首先,创建一个cocos2d-x工程,命名为“MenuTest”。然后把我们需要的图片文件导入到工程中。

       这里我用的是自带TestCpp项目里面的图片,在D:\cocos2d-2.0-x-2.0.4\samples\TestCpp\Resources\Images(你的目录有可能不一样)找到btn-play-normal.png和btn-play-selected.png复制到我们自己的项目中的Resources文件夹,然后在VS中右击项目选择添加->现有项,添加刚刚复制的图片到我们的项目MenuTest即可。

       然后修改HelloWorld.h文件如下,即添加了两个回调函数。

#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h"

#include "SimpleAudioEngine.h"
using namespace cocos2d;

class HelloWorld : public cocos2d::CCLayer
{
public:
    // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
    virtual bool init();  

    // there's no 'id' in cpp, so we recommand to return the exactly class pointer
    static cocos2d::CCScene* scene();
    
    // a selector callback
    void menuCloseCallback(CCObject* pSender);

    void imageMenuCallback(CCObject* pSender);

    void labelMenuCallback(CCObject* pSender);

    // implement the "static node()" method manually
    CREATE_FUNC(HelloWorld);
};
#endif  // __HELLOWORLD_SCENE_H__

       接下来是HelloWorld.cpp文件,我们对init函数作了如下修改,去除了原先的背景图片和“HelloWorld”文字,保留了右下角的关闭按钮。添加了我们新建的两个菜单。

bool HelloWorld::init()
{
    bool bRet = false;
    do 
    {
        //
        // super init first
        //

        CC_BREAK_IF(! CCLayer::init());

        //
        // add your codes below...
        //

        // 1. Add a menu item with "X" image, which is clicked to quit the program.

        // Create a "close" menu item with close icon, it's an auto release object.
        CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
            "CloseNormal.png",
            "CloseSelected.png",
            this,
            menu_selector(HelloWorld::menuCloseCallback));
        CC_BREAK_IF(! pCloseItem);

        // Place the menu item bottom-right conner.
        pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20));

        // Create a menu with the "close" menu item, it's an auto release object.
        CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
        pMenu->setPosition(CCPointZero);
        CC_BREAK_IF(! pMenu);

        // Add the menu to HelloWorld layer as a child layer.
        this->addChild(pMenu, 1);

		//获得屏幕的大小
		CCSize size = CCDirector::sharedDirector()->getWinSize();
		//创建一个图片菜单项。
		//四个参数代表:正常显示的图片,选中菜单项后显示的图片,关闭时显示的图片,菜单项的回调函数。
		CCMenuItemImage* imageItem = CCMenuItemImage::create(
			"btn-play-normal.png", "btn-play-selected.png", this, menu_selector(HelloWorld::imageMenuCallback));
		//创建一个菜单,并设置位置
		CCMenu* imageMenu = CCMenu::create(imageItem,NULL);
		imageMenu->setPosition(ccp(size.width/2,size.height/2));
        //将图片菜单加入到HelloWorld布景中,第二个参数表示在Z轴的层次,屏幕由里到外从小到大
		addChild(imageMenu,2);

		//创建一个行文本参数代表:显示内容,字体,大小
		CCLabelTTF* label = CCLabelTTF::create("SceondMenu", "Arial",30);
		//创建一个文本项,参数代表:要显示的文本内容,目标对象,回调函数
		CCMenuItemLabel* labelItem = CCMenuItemLabel::create(label,
			this, menu_selector(HelloWorld::labelMenuCallback));
		//创建一个菜单,并设置位置
		CCMenu* labelMenu = CCMenu::create(labelItem,NULL);
		labelMenu->setPosition(ccp(size.width/2,size.height/2+50));
		 //将文本菜单加入到HelloWorld布景中,第二个参数表示在Z轴的层次,屏幕由里到外从小到大
		addChild(labelMenu,2);

        bRet = true;
    } while (0);

    return bRet;
}

最后我们在HelloWorld.cpp文件里面实现声明的两个回调函数。

void HelloWorld::imageMenuCallback(CCObject* pSender)
{
	//在输出台打印一句话
    CCLog("ImageMenu");
}
void HelloWorld::labelMenuCallback(CCObject* pSender)
{
	//在输出台打印一句话
	CCLog("LabelMenu");
}

运行项目出现如下界面

                      

点击LabelMenu菜单输出台打印出“LabelMenu”,点击图片菜单打印“ImageMenu”。

这是最简单的菜单使用方法,大家了解一下,最后祝愿每一个奋斗在路上的人早日实现梦想!


评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值