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
先上代码吧,我们直接在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
相关文章推荐
- 【Cocos2d-x游戏引擎开发笔记(3)】在屏幕上渲染菜单并添加消息响应
- 游戏开发随手记:cocos2d ccLayer响应触摸事件方法
- 【iOS-cocos2d-X 游戏开发之十五】Cocos2dx中响应Android的Back(返回)与Menu(小房子)事件&&Cocos2dx自动释放粒子内存函数!
- Cocos2d-x游戏开发之2.x后弹出键盘后无法响应除键盘外的触摸事件解决
- 【cocos2d-x IOS游戏开发-城市跑酷14】重写触屏[Touch]事件处理机制,响应玩家操作
- 【Cocos2d-x游戏引擎开发笔记(3)】在屏幕上渲染菜单并添加消息响应
- 【Cocos2d-x游戏引擎开发笔记(3)】在屏幕上渲染菜单并添加消息响应
- [cocos2d-x 2.0+游戏开发]鼠标事件以及坐标系
- (转)【iOS-cocos2d-X 游戏开发之十】自定义CCSprite/Layer/CCNode及静态类模版&自定义类细节说明&Cocos2dx触屏事件讲解
- 微信公众帐号自定义菜单创建及事件响应开发教程 附源代码(转)
- quick-cocos2d-x游戏开发【6】——制作您自己的自定义效果button菜单
- 二十四:微信公众帐号开发-自定义菜单的创建及菜单事件响应
- 【Cocos2d游戏开发之二】Cocos2D 游戏开发资源贴(教程以及源码)
- SDL游戏开发教程03(消息循环和键盘事件响应)
- 微信公众帐号开发-自定义菜单的创建及菜单事件响应的实例
- 【iOS-Cocos2d游戏开发之五】多触点与触屏事件详解(单一监听、事件分发)【11月28日更新】
- [014]微信公众帐号开发教程第14篇-自定义菜单的创建及菜单事件响应
- 【iOS-Cocos2d游戏开发之六】对触屏事件追加讲解,解决无法触发ccTouchMoved事件[重要!]
- 微信公众帐号开发教程第14篇-自定义菜单的创建及菜单事件响应
- 【iOS-cocos2d-X 游戏开发之二】【必看篇】总结阐述Cocos2d-X与Cocos2d-iphone区别;