有时候,我们希望实现一个选项卡功能,就是切换tab选项,场景中的内容会跟着改变,但是tab选项卡不动。这是用切换场景的方式没办法做到的。
这里我们就可以使用CCLayerMultiplex来实现这个功能。
创建布景
这里创建3个布景来做示范。分别是Laye1,Layer2和Layer3。代码就不贴了,布景内容可以直接使用HelloWorld的代码。
创建主场景
主场景的初始化函数如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| bool CCMainScene::init() { bool bRet=false; do { CC_BREAK_IF(!CCScene::init()); _layer1=CCLayer1::create(); _layer2=CCLayer2::create(); _layer3=CCLayer3::create(); _layerMuticomplex=CCLayerMultiplex::create(_layer1,_layer2,_layer3,NULL); this->addChild(_layerMuticomplex); CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin(); CCMenuItemImage *pCloseItem1 = CCMenuItemImage::create( "w_b.png", "w_b.png", this, menu_selector(CCMainScene::menuCallback)); CCMenuItemImage *pCloseItem2 = CCMenuItemImage::create( "r_b.png", "r_b.png", this, menu_selector(CCMainScene::menuCallback)); CCMenuItemImage *pCloseItem3 = CCMenuItemImage::create( "g_b.png", "g_b.png", this, menu_selector(CCMainScene::menuCallback)); pCloseItem1->setTag(0); pCloseItem2->setTag(1); pCloseItem3->setTag(2); CCMenu* pMenu = CCMenu::create(pCloseItem1, pCloseItem2, pCloseItem3, NULL); pMenu->alignItemsHorizontallyWithPadding(-1); pMenu->setPosition(visibleSize.width/2,25); this->addChild(pMenu, 1); bRet=true; } while (0); return bRet; }
|
回调函数如下:
1 2 3 4 5 6 7 8 9
| void CCMainScene::menuCallback(CCObject* pSender) { int item=((CCMenuItemImage*)pSender)->getTag(); if (item!=curLayerPos) { _layerMuticomplex->switchTo(item); curLayerPos=item; } }
|
效果
为了让效果明显一点,我让3个布景稍微有点区别。当然菜单是可以做normal,pressed,disable三态的,这里略去。点击不同的选项卡就可以切换到不同的布景层。当然CCLayerMultiplex还可以嵌套使用。
源码下载地址
下载地址