您的位置:首页 > 移动开发 > Cocos引擎

Cocos2D-x游戏开发之二:菜单事件响应

2014-03-15 22:40 549 查看
接着描述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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐