接着描述Cocos2D-x基础知识。这一节我描述一下Cocos2D-x菜单的定义和响应。
先上代码吧,我们直接在helloworld的init函数中做更改调试:
bool HelloWorld::init()
{
bool bRet = false;
do
{
//
// super init first
//
CC_BREAK_IF(! CCLayer::init());
//
CCSize size = CCDirector::sharedDirector()->getWinSize();
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));
CCLabelTTF *label = CCLabelTTF::create("Show Sprite","Arial",30);
CCMenuItemLabel *plabel = CCMenuItemLabel::create(label,this,menu_selector(HelloWorld::LabelCallback));
// Create a menu with the "close" menu item, it's an auto release object.
CCMenu* pMenu = CCMenu::create(pCloseItem,plabel, NULL);
pMenu->setPosition(size.width/2,size.height/2);
CC_BREAK_IF(! pMenu);
pMenu->alignItemsVertically();
// Add the menu to HelloWorld layer as a child layer.
this->addChild(pMenu, 2);
CCSprite* pSprite = CCSprite::create("HelloWorld.png");
CC_BREAK_IF(! pSprite);
pSprite->setPosition(ccp(size.width/2, size.height/2));
pSprite->setVisible(false);
this->addChild(pSprite, 0,1);
bRet = true;
} while (0);
return bRet;
}
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
// "close" menu item clicked
CCDirector::sharedDirector()->end();
}
void HelloWorld::LabelCallback(CCObject* pSender)
{
CCSprite *spr=(CCSprite*)this->getChildByTag(1);
if (spr->isVisible())
{
spr->setVisible(false);
}
else
spr->setVisible(true);
}
下面对代码加以解释:
首先菜单子项:CCMenuItem 有很多种形式的实现我们这里用了最常用的MenuItemImag 和MenuItemLabel 其具体的描述请参见文档。
CmenuItem需要加入到容器CCMenu中来使用(其实这里的CCMenu好比CCsene我只这么理解的)然后将CCMenu加入到Layer中就能在场景中显示了。
注意设置菜单事件用menu_selector()来实现。
demo源码:http://download.csdn.net/detail/vanquishedzxl/7047123