[置顶]【玩转cocos2d-x之十四】菜单选项卡的实现

[置顶]【玩转cocos2d-x之十四】菜单选项卡的实现       

        分类:            cocos2d-x 906人阅读 评论(5) 收藏 举报

原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12940733


有时候,我们希望实现一个选项卡功能,就是切换tab选项,场景中的内容会跟着改变,但是tab选项卡不动。这是用切换场景的方式没办法做到的。

这里我们就可以使用CCLayerMultiplex来实现这个功能。


1.创建布景

这里创建3个布景来做示范。分别是Laye1,Layer2和Layer3。代码就不贴了,布景内容可以直接使用HelloWorld的代码。


2.创建主场景

主场景的初始化函数如下:

  1. bool CCMainScene::init() 
  2.     bool bRet=false
  3.     do  
  4.     { 
  5.         CC_BREAK_IF(!CCScene::init()); 
  6.  
  7.         _layer1=CCLayer1::create();//创建3个层的实例 
  8.         _layer2=CCLayer2::create(); 
  9.         _layer3=CCLayer3::create(); 
  10.  
  11.         _layerMuticomplex=CCLayerMultiplex::create(_layer1,_layer2,_layer3,NULL);//创建多层布景层 
  12.         this->addChild(_layerMuticomplex);//添加到场景,默认显示第一个布景 
  13.  
  14.         CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); 
  15.         CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin(); 
  16.  
  17.         CCMenuItemImage *pCloseItem1 = CCMenuItemImage::create(//创建3个tab菜单,用于切换布景 
  18.             "w_b.png"
  19.             "w_b.png"
  20.             this
  21.             menu_selector(CCMainScene::menuCallback)); 
  22.  
  23.         CCMenuItemImage *pCloseItem2 = CCMenuItemImage::create( 
  24.             "r_b.png"
  25.             "r_b.png"
  26.             this
  27.             menu_selector(CCMainScene::menuCallback)); 
  28.  
  29.         CCMenuItemImage *pCloseItem3 = CCMenuItemImage::create( 
  30.             "g_b.png"
  31.             "g_b.png"
  32.             this
  33.             menu_selector(CCMainScene::menuCallback)); 
  34.  
  35.         // create menu, it's an autorelease object 
  36.         pCloseItem1->setTag(0);//给tab按钮设置tag,方便回调函数中的获取 
  37.         pCloseItem2->setTag(1); 
  38.         pCloseItem3->setTag(2); 
  39.         CCMenu* pMenu = CCMenu::create(pCloseItem1, pCloseItem2, pCloseItem3, NULL);//创建菜单 
  40.         pMenu->alignItemsHorizontallyWithPadding(-1);//设置菜单项间隔 
  41.         pMenu->setPosition(visibleSize.width/2,25); 
  42.         this->addChild(pMenu, 1);//注意哦,菜单要在场景中添加而不是在布景中了!而且z轴要高于多层布景,保证可见。 
  43.         bRet=true
  44.     } while (0); 
  45.     return bRet; 

回调函数如下:

  1. void CCMainScene::menuCallback(CCObject* pSender) 
  2.     int item=((CCMenuItemImage*)pSender)->getTag();//获取选择项 
  3.     if (item!=curLayerPos) 
  4.     { 
  5.         _layerMuticomplex->switchTo(item);//切换布景,如果使用switchToAndReleaseMe会释放掉当前布景 
  6.         curLayerPos=item; 
  7.     } 

3.效果

为了让效果明显一点,我让3个布景稍微有点区别。当然菜单是可以做normal,pressed,disable三态的,这里略去。点击不同的选项卡就可以切换到不同的布景层。当然CCLayerMultiplex还可以嵌套使用。


         


4.源码下载地址

http://download.csdn.net/detail/jackyvincefu/6421801

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值