【Cocosd2d-x CCMenu菜单之二】

菜单项CCMenuItem是一个基类, 子类CCMenuItemFont、CCMenuItemLabel、CCMenuItemSprite、CCMenuItemToggle可加入CCMenu中形成菜单。

程序代码:

bool HelloWorld::init()
{

    if ( !CCLayer::init() )
    {
        return false;
    }

    CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
    CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();

    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 code...
	//使用字体定义菜单项,包括 CCMenuItemAtlasFont, CCMenuItemFont 两种方式,CCMenuItemFont通过设置字体名称来设置字体。
	CCMenuItemFont::setFontSize(30); //字号
	CCMenuItemFont::setFontName("Courier New");//字体
	CCMenuItemFont *item = CCMenuItemFont::create("--- Go Back ---", this, menu_selector(HelloWorld::menuItemFontcall));//参数1:文字内容,参数2:执行回调函数的目标类,参数3:按下触发的回调函数
	//item->setPosition(ccp(visibleSize.width/2,100));  

	//通过字体配置PNG文件的 CCLabelAtlas
	CCLabelAtlas *atlasfont =  CCLabelAtlas::create("0123456789", "labelatlas.png", 16, 24, ‘.‘);//参数顺序:文字内容,图片,单个文字宽,单个文字高,默认显示字符
	CCMenuItemLabel *item1 = CCMenuItemLabel::create(atlasfont, this, menu_selector(HelloWorld::menuItemFontcall2));//参数顺序:文字渲染类,执行回调函数的目标类,按下触发的回调函数
	//item1->setPosition(ccp(visibleSize.width/2,400));  

	//精灵菜单项
	CCSprite *spriteNormal   = CCSprite::create("menuitemsprite.png",  CCRectMake(0,23*2,115,23));
	CCSprite *spriteSelected = CCSprite::create("menuitemsprite.png",  CCRectMake(0,23*1,115,23));
	CCSprite *spriteDisabled = CCSprite::create("menuitemsprite.png",  CCRectMake(0,23*0,115,23));  

	CCMenuItemSprite* item3 = CCMenuItemSprite::create(spriteNormal, spriteSelected, spriteDisabled, this, menu_selector(HelloWorld::menuCallback3));//参数:3种菜单状态及回调函数
	//item3->setPosition(ccp(visibleSize.width/2,300));  

	//通过字体配置FNT类型文件的CCLabelBMFont
	CCLabelBMFont* label = CCLabelBMFont::create("Enable AtlasItem", "bitmapFontTest3.fnt");
	CCMenuItemLabel* item4 = CCMenuItemLabel::create(label, this, menu_selector(HelloWorld::menuCallback4) );
	//item4->setPosition(ccp(visibleSize.width/2+50,250));  

	//触发器菜单项,可以将任何菜单项传递进去
	CCMenuItemToggle *toggle = CCMenuItemToggle::createWithTarget(  this,
		menu_selector(HelloWorld::menuCallback5),
		CCMenuItemFont::create("On"),
		CCMenuItemFont::create("Off"),
		NULL);
	//toggle->setPosition(ccp(visibleSize.width/2+100, 150));  

	CCMenu *menu = CCMenu::create(item, item1, item3, item4, toggle, NULL);
	menu->alignItemsVertically();

	CCSize s = CCDirector::sharedDirector()->getWinSize();

	int i=0;
	CCNode* child;
	CCArray * pArray = menu->getChildren(); //获取menu所有节点(菜单项)
	CCObject* pObject = NULL;
	CCARRAY_FOREACH(pArray, pObject)
	{
		if(pObject == NULL)
			break;

		child = (CCNode*)pObject;

		CCPoint dstPoint = child->getPosition();//获取每个节点位置
		int offset = (int) (s.width/2 + 50);
		if( i % 2 == 0)
			offset = -offset;

		child->setPosition( ccp( dstPoint.x + offset, dstPoint.y) );//设置菜单项初始位置
		child->runAction(
			CCEaseElasticOut::create(CCMoveBy::create(2, ccp(dstPoint.x - offset,0)), 0.35f) //从初始位置移动新的位置,有振幅效果
			);
		i++;
	}

	menu->setPosition(ccp(s.width/2, s.height/2));
	this->addChild(menu);

	return true; 

}

void HelloWorld::menuItemFontcall(CCObject* pSender)
{
	CCLOG("menuItemFontcall...");
}

void HelloWorld::menuItemFontcall2(CCObject* pSender)
{
	CCLOG("menuItemFontcall2...");
}
void HelloWorld::menuCallback3(CCObject* pSender)
{
	CCLOG("menuCallback3...");
}
void HelloWorld::menuCallback4(CCObject* pSender)
{
	CCLOG("menuCallback4...");
}
void HelloWorld::menuCallback5(CCObject* pSender)
{
	CCLOG("menuCallback5...");
}

【Cocosd2d-x CCMenu菜单之二】,布布扣,bubuko.com

时间: 2024-10-14 21:03:46

【Cocosd2d-x CCMenu菜单之二】的相关文章

【cocod2d-x CCMenu菜单】

CCMenu是一个菜单项的容器,用来装载各种菜单项, 菜单项可以是图片.系统字.或者自定义字体. 菜单项常用设置: void alignItemsVertically(); //垂直方向默认间隙排列, 5个像素 void alignItemsVerticallyWithPadding(float padding);//垂直方向以padding间隙排列 void alignItemsHorizontally();//水平方向默认间隙排列 void alignItemsHorizontallyWit

SharePoint 2013 自定义扩展菜单(二)

原文:SharePoint 2013 自定义扩展菜单(二) 接博文<SharePoint 2013 自定义扩展菜单>,多加了几个例子,方便大家理解. 例七 列表设置菜单扩展(listedit.aspx) 扩展效果 XML描述 <CustomAction Id="CustomAction1" Description="博客园-霖雨" Title="博客园-霖雨" GroupId="GeneralSettings"

OpenWrt的luci web管理器添加新菜单(二)

继上一篇:OpenWrt的luci web管理器添加新菜单 Call的方式: 在/usr/lib/lua/luci/controller/admin/new_tab.lua 文件中添加如下红色部分的内容: -- Copyright 2008 fulinux <[email protected]>-- Licensed to the public under the Apache License 2.0. local fs = require "nixio.fs" modul

WIN 下的超动态菜单(二)用法

WIN 下的超动态菜单(一)简介 作者:黄山松,发表于博客园:http://www.cnblogs.com/tomview/         auto_dynamenu 是一个动态生成WINDOWS菜单的c++封装库,设计思路是要尽量简化动态菜单的生成代码,在程序界面任何地方想要显示菜单(特别是右键菜单)的时候,可以方便生成菜单,特别可以根据程序当时的内部数据,内部状态来生成不同的动态菜单.         auto_dynamenu 只封装了一个静态的接口函数,这样处理的目的是把类的实现代码可

VSIX项目,添加右键菜单(二)

1.新建VSIX项目后,里边基本什么都没有 项目上右击,添加新建项 随便起一个名字,例如我的是  RightCmd 2.里边有一个vsct的文件,这个文件相当于MVC里的html,是用于配置显示的. 打开它,里边前几行,有一个引入的文件,vsshlids.h,这个文件,你可以去      项目路径\packages\Microsoft.VSSDK.BuildTools.14.3.25407\tools\vssdk\inc   (注意版本号)下找,里边是vs自带的命令 其中比较关键的几个 guid

12.菜单(二)

1.右键菜单(Context Menu,上下文菜单)的使用 (1)创建菜单 右键菜单是一个弹出式菜单,使用CreatePopupMenu创建 (2)显示弹出式菜单 BOOL TrackPopupMenu( HMENU          hMenu,        //弹出菜单句柄 UINT             uFlags,         //显示方式 int                 x,                //水平位置 int                 y,  

第四十一讲:Android之Menu菜单(二)

春蚕到死丝方尽,人至期颐亦不休.一息尚存须努力,留作青年好范畴.-- 吴玉章 本讲内容:子菜单 SubMenu android中点击子菜单将弹出悬浮窗口显示子菜单项.子菜单不支持嵌套,即子菜单中不能再包括其他子菜单. 我们通过一个例子感受一下,代码的讲解都写在注释里了 下面是MainActivity.java主界面文件: public class MainActivity extends Activity { @Override protected void onCreate(Bundle sa

Android实现网易新闻客户端侧滑菜单(二)

前面已经讲过通过三方开源库SlideMenu来实现这种效果,请参考Android实现网易新闻客户端侧滑菜单(一) 今天通过自定义View来实现这种功能 代码如下: SlideMenu.java <span style="font-family:SimSun;font-size:14px;">package com.jackie.slidemenu.view; import android.content.Context; import android.graphics.Ca

SharePoint开发 - 自定义导航菜单(二)母版页的菜单应用

接上篇点击打开链接 本篇叙述在母版页中应用之前的配置信息生成菜单,主要涉及到母版页的自定义,并应用了第三方控件库DevExpress,感兴趣的可以看看,这套东西很强大,戳这里 新建一个SharePoint项目,添加一个模块Module.Module会自动附带一个sample.txt的文件和一个Elements.xml的定义文件.我们删除掉没用的sample.txt,修改Elements.xml为如下所示 <?xml version="1.0" encoding="utf