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

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

2013-10-22 08:15 543 查看
原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12940733

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

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

1.创建布景

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

2.创建主场景

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

[cpp] view
plaincopy

bool CCMainScene::init()  

{  

    bool bRet=false;  

    do   

    {  

        CC_BREAK_IF(!CCScene::init());  

  

        _layer1=CCLayer1::create();//创建3个层的实例  

        _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(//创建3个tab菜单,用于切换布景  

            "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));  

  

        // create menu, it's an autorelease object  

        pCloseItem1->setTag(0);//给tab按钮设置tag,方便回调函数中的获取  

        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);//注意哦,菜单要在场景中添加而不是在布景中了!而且z轴要高于多层布景,保证可见。  

        bRet=true;  

    } while (0);  

    return bRet;  

}  

回调函数如下:

[cpp] view
plaincopy

void CCMainScene::menuCallback(CCObject* pSender)  

{  

    int item=((CCMenuItemImage*)pSender)->getTag();//获取选择项  

    if (item!=curLayerPos)  

    {  

        _layerMuticomplex->switchTo(item);//切换布景,如果使用switchToAndReleaseMe会释放掉当前布景  

        curLayerPos=item;  

    }  

}  

3.效果

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

      

   

4.源码下载地址

http://download.csdn.net/detail/jackyvincefu/6421801
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息