在使用之前,我们的先看一下用这个能实现什么效果,大家应该都玩过保卫萝卜吧,我们就用CClayerMultiplex,实现一下保卫萝卜的设置界面。

使用CClayerMultiplex实现层切换_CClayerMultiplex使用CClayerMultiplex实现层切换_CClayerMultiplex_02使用CClayerMultiplex实现层切换_CClayerMultiplex_03


是不是点击,选项,数据统计,制作方界面都会变,可能有的小伙伴会想,我用多个类也能实现,或者我用类似选关的方法,让层左右滑动呗,当然都可以......我只是讲例子(当然实际作出来的效果和原版很差距,上面只有3个层背景)

首先,我们先查看一下官方是怎么用这玩意的

CCLayerMultplex:可以包含好几个layer,但是只显示一个layer,可以实现多个Layer之间的切换

官方示例是这样的

在.h中

//实现多层切换的CCLayerMultiplex对象  

 CCLayerMultiplex* multi;

在.cpp中

//设置窗口的背景颜色为绿色

CCLayerColor* layer1 = CCLayerColor::create(ccc4(0, 255, 0, 255));

//设置窗口的背景颜色为红色
CCLayerColor* layer2 = CCLayerColor::create(ccc4(255, 0, 0, 255));
 //多层
multi = CCLayerMultiplex::create(layer1, layer2, NULL);
//multi->switchTo(1);
addChild(multi);

奥,这样一看,这个家伙好像一个有特定功能的控制器,把层摆放好,每一个做好标记

那我也借鉴一下,试试

注:因为我也是刚刚学习cocos2d-x的新手,代码偏于傻瓜化,不要笑

我在.h里这样写

#pragma once
#include "cocos2d.h"
using namespace cocos2d;
class Setting : public CCLayer
{
public:
 bool init();
 static CCScene* scene();
 CCLayerMultiplex *LL;  //多层控制器
 void SetBack(CCObject*);//设置按钮的回调函数
 void Datatongji(CCObject*);//数据统计
 void Makemen(CCObject*);//制作方
 CREATE_FUNC(Setting);
 Setting(void);
 ~Setting(void);
};

.cpp

#include "Setting.h"

Setting::Setting(void)
{
}
Setting::~Setting(void)
{
}
bool Setting::init()
{
 CCLayer::init();
 //-----获取坐标和锚点--------
 CCSize sz = CCDirector::sharedDirector()->getVisibleSize();
 CCPoint point = CCDirector::sharedDirector()->getVisibleOrigin();
 //-----加载plist文件---------
 CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("scene/setting01-hd.plist");
 CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("scene/setting02-hd.plist");
 //-----添加三个层,使用CClayerMultiplex管理层-------------
 CCLayer* L1 = CCLayer::create();
 CCSprite* L1bg = CCSprite::createWithSpriteFrameName("setting_bg.png");
 L1->addChild(L1bg);
 L1->setPosition(ccp(sz.width/2,sz.height/2));
 CCLayer* L2 = CCLayer::create();
 CCSprite* L2bg = CCSprite::createWithSpriteFrameName("statistics_bg.png");
 L2->addChild(L2bg);
 L2->setPosition(ccp(sz.width/2,sz.height/2));
 CCLayer* L3 = CCLayer::create();
 CCSprite* L3bg = CCSprite::createWithSpriteFrameName("credits_bg.png");
 L3->addChild(L3bg);
 L3->setPosition(ccp(sz.width/2,sz.height/2));
 LL = CCLayerMultiplex::create(L1,L2,L3,NULL);
 LL->switchTo(0);
 this->addChild(LL,1);
 //-----添加按钮--------------
 //选项按钮
 CCMenuItemImage* set = CCMenuItemImage::create(NULL,NULL,this,menu_selector(Setting::SetBack));
 CCSprite* set1 = CCSprite::createWithSpriteFrameName("options_normal_CN.png");
 CCSprite* set2 = CCSprite::createWithSpriteFrameName("options_selected_CN.png");
 set->setNormalImage(set1);
 set->setSelectedImage(set2);
 //数据统计
 CCMenuItemImage* Datemen = CCMenuItemImage::create(NULL,NULL,this,menu_selector(Setting::Datatongji));
 CCSprite* Datemen1 = CCSprite::createWithSpriteFrameName("statistics_normal_CN.png");
 CCSprite* Datemen2 = CCSprite::createWithSpriteFrameName("statistics_selected_CN.png");
 Datemen->setNormalImage(Datemen1);
 Datemen->setSelectedImage(Datemen2);
 //制作方
 CCMenuItemImage* men = CCMenuItemImage::create(NULL,NULL,this,menu_selector(Setting::Makemen));
 CCSprite* men1 = CCSprite::createWithSpriteFrameName("credits_normal_CN.png");
 CCSprite* men2 = CCSprite::createWithSpriteFrameName("credits_selected_CN.png");
 men->setNormalImage(men1);
 men->setSelectedImage(men2);
 //menu菜单集合
 CCMenu* menu = CCMenu::create(set,Datemen,home,men,NULL);
 menu->setPosition(ccp(sz.width/2,sz.height/2));
 set->setPosition(ccp(-210,275));//不要在意这些数字,要根据你自己做的demo设置
 Datemen->setPosition(ccp(0,275));
 men->setPosition(ccp(210,275));
 this->addChild(menu,2);
 return true;
}
CCScene* Setting::scene()
{
 CCScene *p = CCScene::create();
 Setting* pMenu = Setting::create();
 p->addChild(pMenu);
 return p;
}
void Setting::SetBack(CCObject*)
{
 LL->switchTo(0);//这里不得不说一下,switchTo激活层,数字0粗略的认为是下标吧,我蒙着填写的,结果好用,好吧,无话可说!

}
void Setting::Datatongji(CCObject*)
{
    LL->switchTo(1);
}
void Setting::Makemen(CCObject*)
{
 LL->switchTo(2);
}

看一下不一样的结果吧

使用CClayerMultiplex实现层切换_CClayerMultiplex_04使用CClayerMultiplex实现层切换_CClayerMultiplex_05使用CClayerMultiplex实现层切换_CClayerMultiplex_06

想必大家看到结果图是,要吐槽的心情已经很复杂了,没添加其它精灵也就算了,居然连按钮也应付,呵呵,就那么个意思吧,哪位大神要是实在看我的代码看不下去了,敬请批评!

好嘞,完工,迅速消失在茫茫人海中......