Cocos2d-x3.2 LayerMultiplex使用说明

LayerMultiplex是层的控制器类

使用如下

LayerMultiplexTest.h

//
//  LayerMultiplexTest.h
//  cpp4
//
//  Created by 杜甲 on 10/13/14.
//
//

#ifndef __cpp4__LayerMultiplexTest__
#define __cpp4__LayerMultiplexTest__

#include "cocos2d.h"

USING_NS_CC;

class LayerMultiplexTest : public Layer
{
public:

    virtual bool init();

    // there's no 'id' in cpp, so we recommend returning the class instance pointer
    static cocos2d::Scene* scene();

    // implement the "static node()" method manually
    CREATE_FUNC(LayerMultiplexTest);

};

class TestMainLayer : public LayerColor
{

public:
    virtual bool init();
    CREATE_FUNC(TestMainLayer);

private:
    void menuCallback1(cocos2d::Ref *sender);
    void menuCallback2(cocos2d::Ref *sender);

};

class TestLayer1 : public LayerColor
{

public:
    virtual bool init();
    CREATE_FUNC(TestLayer1);
    void menuCallback1(cocos2d::Ref *sender);
};

class TestLayer2 : public LayerColor
{

public:
    virtual bool init();
    CREATE_FUNC(TestLayer2);
    void menuCallback1(cocos2d::Ref *sender);
};

#endif /* defined(__cpp4__LayerMultiplexTest__) */

LayerMultiplexTest.cpp

//
//  LayerMultiplexTest.cpp
//  cpp4
//
//  Created by 杜甲 on 10/13/14.
//
//

#include "LayerMultiplexTest.h"

Scene* LayerMultiplexTest::scene()
{
    // 'scene' is an autorelease object
    auto scene = Scene::create();

    // 'layer' is an autorelease object
    LayerMultiplexTest *layer = LayerMultiplexTest::create();

    // add layer as a child to scene
    scene->addChild(layer);

    // return the scene
    return scene;
}

bool LayerMultiplexTest::init()
{
    bool bRet = false;
    do {
        CC_BREAK_IF(!Layer::init());

        auto mainLayer = TestMainLayer::create();
        auto layer1 = TestLayer1::create();
        auto layer2 = TestLayer2::create();
        //将层放入LayerMultiplex中
        auto layerMutiplex = LayerMultiplex::create(mainLayer,layer1,layer2,nullptr);
        addChild(layerMutiplex,0);

        bRet = true;
    } while (0);
    return bRet;
}

bool TestMainLayer::init()
{
    bool bRet = false;
    do {
        CC_BREAK_IF(!LayerColor::init());
        auto winSize = Director::getInstance()->getWinSize();

        auto label1 = Label::createWithBMFont("bitmapFontTest3.fnt", "TestLayer 1");
        auto item1 = MenuItemLabel::create(label1, CC_CALLBACK_1(TestMainLayer::menuCallback1, this));

        auto label2 = Label::createWithBMFont("bitmapFontTest3.fnt", "TestLayer 2");
        auto item2 = MenuItemLabel::create(label2, CC_CALLBACK_1(TestMainLayer::menuCallback2, this));

        auto menu = Menu::create(item1,item2, NULL);
        menu->alignItemsVertically();
        menu->setPosition(winSize / 2);
        addChild(menu);

        bRet = true;
    } while (0);
    return bRet;
}

void TestMainLayer::menuCallback1(cocos2d::Ref *sender)
{
    static_cast<LayerMultiplex *>(_parent)->switchTo(1);

}

void TestMainLayer::menuCallback2(cocos2d::Ref *sender)
{
    static_cast<LayerMultiplex *>(_parent)->switchTo(2);
}

bool TestLayer1::init()
{
    bool bRet = false;
    do {
        CC_BREAK_IF(!LayerColor::initWithColor(Color4B(100, 200, 200, 100)));
        auto winSize = Director::getInstance()->getWinSize();
        auto label1 = Label::createWithBMFont("bitmapFontTest3.fnt", "MainLayer");
        auto item1 = MenuItemLabel::create(label1, CC_CALLBACK_1(TestLayer1::menuCallback1, this));
        auto menu = Menu::create(item1, NULL);
        menu->alignItemsVertically();
        menu->setPosition(winSize / 2);
        addChild(menu);

        bRet = true;
    } while (0);
    return bRet;
}
void TestLayer1::menuCallback1(cocos2d::Ref *sender)
{
    //返回  方法
    static_cast<LayerMultiplex *>(_parent)->switchTo(0);

}

bool TestLayer2::init()
{
    bool bRet = false;
    do {
        CC_BREAK_IF(!LayerColor::initWithColor(Color4B(100, 100, 200, 100)));
      auto winSize = Director::getInstance()->getWinSize();
        auto label1 = Label::createWithBMFont("bitmapFontTest3.fnt", "MainLayer");
        auto item1 = MenuItemLabel::create(label1, CC_CALLBACK_1(TestLayer2::menuCallback1, this));

        auto menu = Menu::create(item1, NULL);
        menu->alignItemsVertically();
        menu->setPosition(winSize / 2);
        addChild(menu);

        bRet = true;
    } while (0);
    return bRet;
}

void TestLayer2::menuCallback1(cocos2d::Ref *sender)
{
    static_cast<LayerMultiplex *>(_parent)->switchTo(0);

}
时间: 2025-01-01 23:36:22

Cocos2d-x3.2 LayerMultiplex使用说明的相关文章

android 布局之滑动探究 scrollTo 和 scrollBy 方法使用说明

涉及到滑动,就涉及到VIEW,大家都知道,android的UI界面都是由一个一个的View以及View的派生类组成,View作为基类,而常用的布局里面的各种布局就是它派生出来的ViewGroup的子类,ViewGroup作为各个组件的容器搭建了整体的UI.以下是android UI的结构示示意图: 查看源码 /** * Implement this to do your drawing. * * @param canvas the canvas on which the background w

Cocos2d坐标系转换

Cocos2d-x坐标系和OpenGL坐标系相同,都是起源于笛卡尔坐标系(高中数学里面那种). 笛卡尔坐标系 笛卡尔坐标系中定义右手系原点在左下角,x向右,y向上,z向外,OpenGL坐标系为笛卡尔右手系. 屏幕坐标系和Cocos2d坐标系 标准屏幕坐标系使用和OpenGL不同的坐标系,而Cocos2d则使用和OpenGL相同的坐标系. iOS, Android, Windows Phone等在开发应用时使用的是标准屏幕坐标系,原点为屏幕左上角,x向右,y向下. Cocos2d坐标系和OpenG

Cocos2d-x之LayerMultiplex的使用

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

轻量级的C++插件框架 - X3 C++ PluginFramework

X3 C++ PluginFramework 代号为X3的C++轻量级通用插件框架平台是一套通用的C++轻量级插件体系,没有使用MFC.ATL.COM.可在Windows和Linux下编译运行.应用程序可以基于X3插件框架进行快速开发,X3插件框架中的插件既可以单独使用,又可以灵活组合使用.X3插件框架已经过3年十几个系统的实际使用验证. 目前X3插件框架包括插件内核部分(插件基础.插件管理器.Observer管理器插件.日志管理器插件)和实用技术插件(XML读写封装插件.数据库操作封装插件.文

Linux系统下安装rz/sz命令及使用说明

对于经常使用Linux系统的人员来说,少不了将本地的文件上传到服务器或者从服务器上下载文件到本地,rz / sz命令很方便的帮我们实现了这个功能,但是很多Linux系统初始并没有这两个命令.今天,我们就简单的讲解一下如何安装和使用rz.sz命令. 1.软件安装 (1)编译安装 root 账号登陆后,依次执行以下命令: 1 cd /tmp 2 wget http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz 3 tar zxvf lrzsz-0.1

cocos2d::Vector

v3.0 beta加入 定义在"COCOS2DX_ROOT/cocos/base"的"CCVector.h"头文件中. template<class T>class CC_DLL Vector; cocos2d::Vector<T>是一个封装好的能动态增长顺序访问的容器. cocos2d::Vector<T>中的元素是按序存取的,它的低层实现数据结构是标准模版库中的标准顺序容器std::vector. 在Cocos2d-x v3.

Cocos2D中Action的进阶使用技巧(一)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 假设认为写的不好请多提意见,假设认为不错请多多支持点赞.谢谢! hopy ;) 大家对Cocos2d中动作的使用大概都非常清楚了,事实上本身action的概念也不复杂. 可是在某些情况下,一般的动作不能满足我们需求的时候,我们就必须使用更高级的Action方法来解决这个问题. 比方,串行化(不是序列化哦,这是两个全然不同的概念)不同Action的执行-有些童鞋可能会说非常easy,直接用CCActionSequence不就结了,可是等等我

Git使用说明

Git是流行的分布式版本控制系统,可以方便的管理多人协作的项目并避免了集中式版本控制系统对服务器的依赖. 简介 版本库(repository)是一个由Git管理的目录,Git将跟踪工作目录下文件的修改并在需要时还原. 在工作目录下.git子目录则维护着版本库 . Git维护三个组件: 工作目录: 保存实际文件 暂存区 : 保存尚未提交的修改 版本库: 保存已提交的修改 HEAD: 指向最后一次提交后的结果(checkout 命令的主要功能就是操作HEAD). Git将每次提交的修改串成一条时间线

软件使用说明

软件使用说明:我们的软件是一款基于在校女大学生的记账软件,根据调查身边的女生,统计出了大部分的女生每个月开销的分类.在我们的软件中按这些分类记录每个人的每天的开销,根据调查结果显示有部分学生还有收入,所以我们的记账软件还增加了收入项.我们软件可以根据你每天输入的开销来计算你每个月的开销,并且你可以在其中设置每个月开销的额度,根据你的开销对你的花销进行提醒.在每天你也可以收到关于你这一天开销的提醒,比如:提醒你录入,提醒你今天的花费是否超标.