1、用处
用于管理Layer的切换,而不用切换场景。
2、代码
1).h文件
#include "cocos2d.h" #include "ui/CocosGUI.h" #include "VisibleRect.h" USING_NS_CC; using namespace ui; class LayerMultiplexDemo : public Scene { public: CREATE_FUNC(LayerMultiplexDemo); virtual bool init(); }; class BaseLayer : public Layer { public: CREATE_FUNC(BaseLayer); virtual bool init(); Text* text; Size winSize; }; class MainLayer : public BaseLayer { public: CREATE_FUNC(MainLayer); virtual bool init(); void menuCallback1(Ref* sender); void menuCallback2(Ref* sender); void menuCallback3(Ref* sender); }; class Layer1 : public BaseLayer { public: CREATE_FUNC(Layer1); virtual bool init(); void touchEvent(cocos2d::Ref *pSender,cocos2d::ui::Widget::TouchEventType type); }; class Layer2 : public BaseLayer { public: CREATE_FUNC(Layer2); virtual bool init(); void touchEvent(cocos2d::Ref *pSender,cocos2d::ui::Widget::TouchEventType type); }; class Layer3 : public BaseLayer { public: CREATE_FUNC(Layer3); virtual bool init(); void touchEvent(cocos2d::Ref *pSender,cocos2d::ui::Widget::TouchEventType type); };
2).cpp文件
#include "LayerMultiplexDemo.h" bool LayerMultiplexDemo::init() { bool bRet = false; do{ CC_BREAK_IF(!Scene::init()); MenuItemFont::setFontSize(20); auto layer = MainLayer::create(); auto layer1 = Layer1::create(); auto layer2 = Layer2::create(); auto layer3 = Layer3::create(); auto layerMultiplex = LayerMultiplex::create(layer,layer1,layer2,layer3,nullptr); addChild(layerMultiplex,0); bRet = true; }while(0); return bRet; } bool BaseLayer::init() { bool bRet = false; do{ CC_BREAK_IF(!Layer::init()); winSize = Director::getInstance()->getWinSize(); text = Text::create(); text->setFontSize(40); text->setPosition(Vec2(winSize.width/2,winSize.height - 100)); addChild(text); bRet = true; }while(0); return bRet; } bool MainLayer::init() { bool bRet = false; do{ CC_BREAK_IF(!BaseLayer::init()); text->setString("Hello! This is MainLayer!"); auto label1 = Label::createWithBMFont("bitmapFontTest3.fnt","Layer 1"); auto item1 = MenuItemLabel::create(label1,CC_CALLBACK_1(MainLayer::menuCallback1,this)); auto label2 = Label::createWithBMFont("bitmapFontTest3.fnt","Layer 2"); auto item2 = MenuItemLabel::create(label2,CC_CALLBACK_1(MainLayer::menuCallback2,this)); auto label3 = Label::createWithBMFont("bitmapFontTest3.fnt","Layer 3"); auto item3 = MenuItemLabel::create(label3,CC_CALLBACK_1(MainLayer::menuCallback3,this)); auto menu = Menu::create(item1,item2,item3,nullptr); menu->alignItemsVertically(); addChild(menu); menu->setPosition(Vec2(winSize.width/2,winSize.height/2)); bRet = true; }while(0); return bRet; } void MainLayer::menuCallback1(cocos2d::Ref *sender) { static_cast<LayerMultiplex*>(_parent)->switchTo(1); } void MainLayer::menuCallback2(cocos2d::Ref *sender) { static_cast<LayerMultiplex*>(_parent)->switchTo(2); } void MainLayer::menuCallback3(cocos2d::Ref *sender) { static_cast<LayerMultiplex*>(_parent)->switchTo(3); } bool Layer1::init() { bool bRet = false; do{ CC_BREAK_IF(!BaseLayer::init()); text->setString("Hello! This is Layer1"); auto layout = Layout::create(); layout->setContentSize(Size(300,300)); layout->setBackGroundColorType(cocos2d::ui::Layout::BackGroundColorType::SOLID); layout->setBackGroundColor(Color3B::GRAY); layout->ignoreAnchorPointForPosition(false); layout->setAnchorPoint(Vec2::ANCHOR_MIDDLE); layout->setPosition(Vec2(winSize.width/2,winSize.height/2)); addChild(layout); auto button = Button::create("btn-about-normal.png","btn-about-selected.png"); button->setPosition(Vec2(layout->getContentSize().width/2,layout->getContentSize().height/2)); layout->addChild(button); button->addTouchEventListener(CC_CALLBACK_2(Layer1::touchEvent,this)); bRet = true; }while(0); return bRet; } void Layer1::touchEvent(cocos2d::Ref *pSender,cocos2d::ui::Widget::TouchEventType type) { static_cast<LayerMultiplex*>(_parent)->switchTo(0); } bool Layer2::init() { bool bRet = false; do{ CC_BREAK_IF(!BaseLayer::init()); text->setString("Hello! This is Layer2"); auto layout = Layout::create(); layout->setContentSize(Size(300,layout->getContentSize().height/2)); layout->addChild(button); button->addTouchEventListener(CC_CALLBACK_2(Layer2::touchEvent,this)); bRet = true; }while(0); return bRet; } void Layer2::touchEvent(cocos2d::Ref *pSender,cocos2d::ui::Widget::TouchEventType type) { static_cast<LayerMultiplex*>(_parent)->switchTo(0); } bool Layer3::init() { bool bRet = false; do{ CC_BREAK_IF(!BaseLayer::init()); text->setString("Hello! This is Layer3"); auto layout = Layout::create(); layout->setContentSize(Size(300,layout->getContentSize().height/2)); layout->addChild(button); button->addTouchEventListener(CC_CALLBACK_2(Layer3::touchEvent,this)); bRet = true; }while(0); return bRet; } void Layer3::touchEvent(cocos2d::Ref *pSender,cocos2d::ui::Widget::TouchEventType type) { static_cast<LayerMultiplex*>(_parent)->switchTo(0); }
3、使用效果
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。