菜单项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...");
}