用CCLayerMultiplex层管理的方式实现tab选项卡,更多的使用可以查看API,看代码
新建一个CCScene场景
#ifndef _TestScene_
#define _TestScene_
#include "cocos2d.h"
#include "cocos-ext.h"
#include "Layer1.h"
#include "Layer2.h"
#include "Layer3.h"
#include "Layer4.h"
USING_NS_CC;
USING_NS_CC_EXT;
class TestScene:public cocos2d::CCScene{
public:
TestScene();
~TestScene();
virtual bool init();
CREATE_FUNC(TestScene);
void menuCallback(CCObject* pSender);
//layer图层
Layer1* layer1;
Layer2* layer2;
Layer3* layer3;
Layer4* layer4;
cocos2d::CCLayerMultiplex* layer_mul;
int curLayerPos;
};
#endif
#include "TestScene.h"
TestScene::TestScene(){
layer1=NULL;
layer2=NULL;
layer3=NULL;
layer4=NULL;
curLayerPos=0;
}
TestScene::~TestScene(){}
bool TestScene::init(){
if (!CCScene::init())
{
return false;
}
//初始化三个图层
layer1=Layer1::create();
layer2=Layer2::create();
layer3=Layer3::create();
/*layer4=Layer4::create();*/
// layer1->setTag(11);
// layer2->setTag(12);
// layer3->setTag(13);
// layer4->setTag(14);
CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();
layer_mul=CCLayerMultiplex::create(layer1,layer2,layer3,NULL);
layer_mul->setPosition(ccp(0,50));
this->addChild(layer_mul);
CCMenuItemImage *pCloseItem1 = CCMenuItemImage::create(
"w_b.png",
"r_b.png",
this,
menu_selector(TestScene::menuCallback));
CCMenuItemImage *pCloseItem2 = CCMenuItemImage::create(
"r_b.png",
"w_b.png",
this,
menu_selector(TestScene::menuCallback));
CCMenuItemImage *pCloseItem3 = CCMenuItemImage::create(
"g_b.png",
"r_b.png",
this,
menu_selector(TestScene::menuCallback));
CCMenuItemImage *pCloseItem4 = CCMenuItemImage::create(
"r_b.png",
"w_b.png",
this,
menu_selector(TestScene::menuCallback));
// create menu, it's an autorelease object
pCloseItem1->setTag(0);
pCloseItem2->setTag(1);
pCloseItem3->setTag(2);
/*pCloseItem4->setTag(3);*/
CCMenu* pMenu = CCMenu::create(pCloseItem1, pCloseItem2, pCloseItem3,NULL);
pMenu->alignItemsHorizontallyWithPadding(-1);
pMenu->setPosition(visibleSize.width/2,25);
this->addChild(pMenu, 1);
return true;
}
void TestScene::menuCallback(CCObject* pSender){
int item=((CCMenuItemImage*)pSender)->getTag();
if (item!=curLayerPos)
{
layer_mul->switchTo(item);
curLayerPos=item;
}
}
选项卡要显示的三个图层
#ifndef _Layer1_
#define _Layer1_
#include "cocos2d.h"
#include "cocos-ext.h"
class Layer1:public cocos2d::CCLayer{
public:
Layer1();
~Layer1();
virtual bool init();
CREATE_FUNC(Layer1);
};
#endif
#include "Layer1.h"
USING_NS_CC;
USING_NS_CC_EXT;
using namespace cocos2d;
Layer1::Layer1(){}
Layer1::~Layer1(){}
bool Layer1::init(){
if (!CCLayer::init())
{
return false;
}
CCSize size=CCDirector::sharedDirector()->getVisibleSize();
CCSprite* s1=CCSprite::create("HelloWorld.png");
s1->setScale(0.5);
s1->setPosition(ccp(size.width/2,size.height/2));
this->addChild(s1);
// CCNode* node=CCNode::create();
// node->addChild(s1);
// node->runAction(CCScaleTo::create(0.5,1.5));
return true;
}
#ifndef _Layer2_
#define _Layer2_
#include "cocos2d.h"
#include "cocos-ext.h"
class Layer2:public cocos2d::CCLayer{
public:
Layer2();
~Layer2();
virtual bool init();
CREATE_FUNC(Layer2);
};
#endif
#include "Layer2.h"
USING_NS_CC;
USING_NS_CC_EXT;
using namespace cocos2d;
Layer2::Layer2(){}
Layer2::~Layer2(){}
bool Layer2::init(){
if (!CCLayer::init())
{
return false;
}
CCSize size=CCDirector::sharedDirector()->getVisibleSize();
CCSprite* s2=CCSprite::create("HelloWorld.png");
s2->setScale(0.8);
s2->setPosition(ccp(size.width/2,size.height/2));
this->addChild(s2);
return true;
}
#ifndef _Layer3_
#define _Layer3_
#include "cocos2d.h"
#include "cocos-ext.h"
class Layer3:public cocos2d::CCLayer{
public:
Layer3();
~Layer3();
virtual bool init();
CREATE_FUNC(Layer3);
};
#endif
#include "Layer3.h"
USING_NS_CC;
USING_NS_CC_EXT;
using namespace cocos2d;
Layer3::Layer3(){}
Layer3::~Layer3(){}
bool Layer3::init(){
if (!CCLayer::init())
{
return false;
}
CCSize size=CCDirector::sharedDirector()->getVisibleSize();
CCSprite* s3=CCSprite::create("HelloWorld.png");
s3->setPosition(ccp(size.width/2,size.height/2));
this->addChild(s3);
return true;
}
打完了看看效果吧