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

cocos2dx一tab选项卡的实现

2014-01-13 11:29 549 查看
用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;
}


打完了看看效果吧



源码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: