【cocod2d-x CCMenu菜单】

CCMenu是一个菜单项的容器,用来装载各种菜单项, 菜单项可以是图片、系统字、或者自定义字体。

菜单项常用设置:

 void alignItemsVertically(); //垂直方向默认间隙排列, 5个像素
 void alignItemsVerticallyWithPadding(float padding);//垂直方向以padding间隙排列
 void alignItemsHorizontally();//水平方向默认间隙排列
 void alignItemsHorizontallyWithPadding(float padding);//水平方向以padding间隙排列, 5个像素
 void alignItemsInColumns(unsigned int columns, ...);//将items按照列排列
 void alignItemsInColumns(unsigned int columns, va_list args);
 void alignItemsInRows(unsigned int rows, ...);//将items按照行排列
 void alignItemsInRows(unsigned int rows, va_list args);

菜单图1:

程序代码:

bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !CCLayer::init() )
    {
        return false;
    }

    CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
    CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();
	CCLOG("origin.x: %f, origin.y: %f", origin.x, origin.y)	;

    /////////////////////////////
    // 2. add a menu item with "X" image, which is clicked to quit the program
    //    you may modify it.

    // add a "close" icon to exit the progress. it's an autorelease object
    CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
                                        "CloseNormal.png",
                                        "CloseSelected.png",
                                        this,
                                        menu_selector(HelloWorld::menuCloseCallback));

	pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2 ,
                                origin.y + pCloseItem->getContentSize().height/2));

    // create menu, it's an autorelease object
    CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
    pMenu->setPosition(CCPointZero);
    this->addChild(pMenu, 1);

    /////////////////////////////
    // add your codes below...
	//创建2菜单,每个菜单包括3个菜单项
	for (int i=0; i<2; i++)
	{
		//创建菜单项
		CCMenuItemImage *item1 = CCMenuItemImage::create("btn-about-normal.png", "btn-about-selected.png", this, menu_selector(HelloWorld::menuCallback));
		CCMenuItemImage *item2 = CCMenuItemImage::create("btn-highscores-normal.png", "btn-highscores-selected.png", this, menu_selector(HelloWorld::menuCallback2));
		CCMenuItemImage *item3 = CCMenuItemImage::create("btn-play-normal.png", "btn-play-selected.png", this, menu_selector(HelloWorld::menuCallback3));

		//缩放
		item1->setScaleX( 1.5f );
		item2->setScaleX( 0.5f );
		item3->setScaleX( 0.5f );

		//创建菜单,设置位置
		CCMenu* menu = CCMenu::create(item1, item2, item3, NULL);
		CCSize s = CCDirector::sharedDirector()->getWinSize();
		menu->setPosition(ccp(s.width/2, s.height/2));

		menu->setTag( kTagMenu );

		this->addChild(menu, 0, 100+i);//每个菜单包含标签

		m_centeredMenu = menu->getPosition(); //保存菜单坐标

	}
	m_alignedH = true; //水平对齐标记
	alignMenusH();//菜单水平对齐
    return true;
}
void HelloWorld::menuCallback(CCObject* pSender)
{
}

//第二个菜单项事件处理
void HelloWorld::menuCallback2(CCObject* pSender)
{
	   CCMenu *menu = (CCMenu*)(((CCNode*)(pSender))->getParent());//获取菜单指针
	   GLubyte opacity = menu->getOpacity();//获取菜单透明度
	   if (opacity==80)//若为100,设置不透明,否则设置透明度100
	   {
		   menu->setOpacity(255);
	   }
	   else
		   menu->setOpacity(80);

}
//第三个菜单项事件处理
void HelloWorld::menuCallback3(CCObject* pSender)
{
	m_alignedH = ! m_alignedH;

	if( m_alignedH )  //刚开始是水平对齐
		alignMenusH();
	else
		alignMenusV(); 

}
//水平对齐
void HelloWorld::alignMenusH()
{
	for(int i=0;i<2;i++)
	{
		CCMenu *menu = (CCMenu*)getChildByTag(100+i);//根据标记获取菜单
		menu->setPosition( m_centeredMenu );//初始时菜单的位置
		if(i==0) //第1个菜单位置
		{
			//水平方向5个像素对齐
			menu->alignItemsHorizontally();
			CCPoint p = menu->getPosition();
			menu->setPosition( ccpAdd(p, ccp(0,30)) );//p.x+30, p.y+30

		}
		else //第2个菜单位置
		{
			////水平方向40个像素对齐
			menu->alignItemsHorizontallyWithPadding(40);
			CCPoint p = menu->getPosition();
			menu->setPosition( ccpSub(p, ccp(0,30)) );//p.x-30, p.y-30
		}
	}
}

//垂直对齐
void HelloWorld::alignMenusV()
{
	for(int i=0;i<2;i++)
	{
		CCMenu *menu = (CCMenu*)getChildByTag(100+i);
		menu->setPosition( m_centeredMenu );
		if(i==0)
		{
			//垂直方向5个像素对齐
			menu->alignItemsVertically();
			CCPoint p = menu->getPosition();
			menu->setPosition( ccpAdd(p, ccp(100,0)) );
		}
		else
		{
			//垂直方向40个像素对齐
			menu->alignItemsVerticallyWithPadding(40);
			CCPoint p = menu->getPosition();
			menu->setPosition( ccpSub(p, ccp(100,0)) );
		}
	}
}

【cocod2d-x CCMenu菜单】,布布扣,bubuko.com

时间: 2024-08-08 14:12:25

【cocod2d-x CCMenu菜单】的相关文章

【Cocosd2d-x CCMenu菜单之二】

菜单项CCMenuItem是一个基类, 子类CCMenuItemFont.CCMenuItemLabel.CCMenuItemSprite.CCMenuItemToggle可加入CCMenu中形成菜单. 程序代码: bool HelloWorld::init() { if ( !CCLayer::init() ) { return false; } CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); CCPoi

cocos2dx基础篇(7)——菜单按钮CCMenu、CCMenuItem

[本节内容] 菜单按钮在游戏中是经常被用到的,比如主菜单界面的菜单选项,暂停游戏时的菜单选项等等.cocos2dx引擎同样为我们提供了CCMenu菜单的功能,并包含了一些简单的菜单项CCMenuItem.且菜单项附带触碰按钮时,自动放大的效果. 温馨提示:本节内容比较多,需要大家慢慢分析,不要急于求成. 本节组织结构如下: 一.介绍CCMenu. 二.介绍CCMenuItem,及其具体的六个子类. 三.代码实战. [一.菜单CCMenu] 菜单CCMenu是专门用来承载菜单按钮的CCLayer图

我的IOS学习资源收录

IOS7视频教程-storyboard与UIApplication http://v.youku.com/v_show/id_XNzMxMjgwNzEy.html 关东升老师的ios视频教程 iPhone与iPad开发实战-ios经典应用剖析-7大项目实战开发 1第1讲工具类应用密码生成(Amuck Password Generator)57分钟   2第2讲工具类应用密码生成(Amuck Password Generator)52分钟   3第3讲工具类应用--密码生成(Amuck Passw

Cocos2d-x游戏开发技术精解读书摘要(2016-5-27 10:52)

 Cocos2d-x游戏开发技术精解 刘剑卓 著 2013年6月第1版 chap2 Cocos2d-x引擎的开发环境 2.1跨平台的开发 2.2建立开发环境 2.2.1 PC开发环境 2.2.2 Android开发环境 2.2.3 iOS开发环境 2.3引擎中的混合编译 2.3.1 Java与C++的混合编译 2.3.2 Objective-C与C++的混合编译 2.4引擎的起点 2.4.1应用程序入口 2.4.2引擎应用入口 2.5丰富的示例程序 2.5.1 TestCpp示例项目 2.5

传智播客C++第五期培训视频教程免费下载

C/C++的应用领域几乎无处不在,服务器,嵌入式,物联网,移动互联网,信息安全,游戏,基本上大小通吃.C/C++市场份额高达26%,也就是每四个程序员就有一个C/C++程序员.市场需求量非常大,而且工资高于其他语言.课程讲师:尹成课程内容:C语言 15天1.C语言概述,学习方法,开发环境搭建,HelloWorld案例分析,常量与变量;2.数据类型,数据类型转换,数据输入与输出;3.C语言运算符,C语言操作符;4.C语言表达式,表达式优先级;5.C语言流程控制,分支,顺序,循环逻辑控制;6.函数概

Cocos2d中的Menu使用

学习cocos2d-x中的菜单主要需要了解:菜单(CCMenu)和菜单项(CCMenuItem)以及CCMenuItem的具体子类. a. 下面来学习一下相关的类. 1. CCMenu 菜单,是CCLayer的子类,是一个层(容器),可以往里面添加菜单项.下面是它的类结构图: CCMenu默认接受触屏事件的优先级是-128(优先级很高,因为值越小,响应触屏事件的优先级越高),可以通过继承它实现自定义的效果,创建CCMenu对象的函数: static CCMenu* menuWithItems(C

quick-cocos2d-x游戏开发【13】——节点生命周期事件,帧事件等其他事件

在前面已经学过了"触摸事件","触摸捕获事件","按键事件",此外,quick还有其他几个事件,前面已经列过有这些, 预定义的节点事件: cc.NODE_EVENT - enter, exit 等事件 cc.NODE_ENTER_FRAME_EVENT - 帧事件 cc.NODE_TOUCH_EVENT - 触摸事件 cc.NODE_TOUCH_CAPTURE_EVENT - 捕获触摸事件 预定义的层事件: cc.ACCELERATE_EVENT

Cocos2d-X中的菜单

在Cocos2d-X实现显示菜单的方式比较特殊,首先需要使用CCMenu创建一个菜单,然后使用CCMenuItem创建一个菜单项,实际上程序中显示的菜单是使用CCMenu和CCMenuItemFont共同作用的结果,在Cocos2d-X中CCMenu只是一个容器,需要使用CCMenuItemFont才能实现创建菜单 程序示例:创建一个简单的菜单 程序代码: #include "Menu.h" CCScene* Menu::scene() { CCScene* scene = CCSce

Cocos2d-X中实现菜单特效

Cocos2d-X中可以讲菜单和动作结合起来使用实现菜单特效 程序实例1:使用菜单和动作的组合实现菜单特效<一> #include "MenuItem.h" CCScene* MenuItem::scene() { CCScene* scene = CCScene::create(); MenuItem* layer = MenuItem::create(); scene->addChild(layer); return scene; } bool MenuItem: