上面说场景CCScene相当于一个大容器,那么布景层类CCLayer就是大容器里的若干个小容器。每个游戏场景CCScene会有很多层CCLayer,每一层CCLayer负责各自的任务。看一下CCLayer的类继承关系图,如下:

 
       可以看出,CCLayer是CCNode的子类,并且它还支持触屏、加速度传感器和键盘输入。除此之外,CCLayer还有很多子类,如下:
      这些子类实现了很多UI(如菜单、列表视图、滚(滑)动视图、控件(按钮、开关、滑动条等)),这些子类的用法将在特性的GUI中详细介绍。我们还是重点关注CCLayer的内部结构和功能。
  
  ·CCLayer属性:
    bool m_bIsTouchEnabled:是否使用触屏
    bool m_bIsAccelerometerEnabled:是否使用加速度传感器
    bool m_bIsKeypadEnabled:是否使用键盘输入
 
  ·CCLayer方法:
    bool init():初始化CCLayer
    void onEnter():当进入布景层时调用
    void onExit():当离开布景层时调用
    void onEnterTransitionDidFinish():过场动画结束时调用
   
    //触屏事件响应
    bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent):触屏开始调用
    void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent):触屏移动调用
    void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent):触屏结束调用
    void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent):触屏取消调用
 
    //多点触控事件响应
    void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent):触屏开始调用(多点触控)
    void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent):触屏移动调用(多点触控)
    void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent):触屏结束调用(多点触控)
    void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent):触屏取消调用(多点触控)
   
    void didAccelerate(CCAcceleration* pAccelerationValue):加速度传感器
    void registerWithTouchDispatcher(void):注册触屏事件
 
   以上是CCLayer的主要属性和方法,可以看出CCLayer增加了对触屏、加速度传感器和键盘输入的支持。这在特性中将有详细讲解,这里不再赘述。
  
   下面再介绍一个比较重要的类CCLayerMultiplex。从继承关系中知,它是CCLayer的子类,作用是管理多个CCLayer对象。这个类在开发游戏时非常有用。我们知道,要显示不同游戏界面,是通过CCDirector切换CCScene完成。如果两个场景之间差异很小(如仅背景不同),通过切换场景的方式显示界面,未免有点小提大作。其实,我们只需要切换不同的地方即可,不必将整个场景都切换了。这时,CCLayerMultiplex就派上用场了。我们可以不必切换场景,只需要通过CCLayerMultiplex的switchTo方法切换场景的布景层CCLayer即可。CCLayerMultiplex有如下两个成员变量:
    unsigned int m_nEnabledLayer:当前使用的CCLayer
    CCArray*     m_pLayers     : CCLayer容器
   这样,CCLayerMultiplex就具有管理CCLayer的能力,可以操作使用哪个CCLayer完成场景显示。
   在TestCpp项目中的菜单CCMenu测试中,使用了CCLayerMultiplex,代码如下:
//这里初始化CCLayerMultiplex
void MenuTestScene::runThisTest()
{
    CCLayer* pLayer1 = new MenuLayerMainMenu();
    CCLayer* pLayer2 = new MenuLayer2();
    CCLayer* pLayer3 = new MenuLayer3();
    CCLayer* pLayer4 = new MenuLayer4();
    CCLayer* pLayer5 = new MenuLayerPriorityTest();
    CCLayerMultiplex* layer = CCLayerMultiplex::create(pLayer1, pLayer2, pLayer3, pLayer4, pLayer5, NULL);
    addChild(layer, 0);
    pLayer1->release();
    pLayer2->release();
    pLayer3->release();
    pLayer4->release();
    pLayer5->release();
    CCDirector::sharedDirector()->replaceScene(this);
}
 
//这里使用CCLayerMultiplex的switchTo方法切换CCLayer
void MenuLayerMainMenu::menuCallbackConfig(CCObject* sender)
{
    ((CCLayerMultiplex*)m_pParent)->switchTo(3);
}
 
CCLayer就介绍到这里。
-------------------------------------------------------------------------------------------------------------------

注:本人在本博客的原创文章采用创作共用版权协议http://creativecommons.org/licenses/by-nc-sa/2.5/cn/), 要求署名、非商业用途和保持一致。要求署名包含注明我的网名及文章来源(我的博客地址:http://www.cnblogs.com/binbingg)。

[原创]cocos2d-x研习录-第二阶 概念类之布场层类(CCLayer)的更多相关文章

  1. [原创]cocos2d-x研习录-第二阶 概念类之节点类(CCNode)

    节点类CCNode在基本概念中并不存在,它是为了建立基本概念之间的关联关系而抽象出来的中间辅助类.这个类在Cocos2D-x中极为重要,它为概念类之间搭建了一座宏伟的桥梁.它的继承关系图如下:     ...

  2. [原创]cocos2d-x研习录-第二阶 概念类之精灵类(CCSprite)

    上一节说布景层CCLayer是小容器,那么精灵类CCSprite就是容器添加的内容,它是构成游戏的主要元素.精灵这个名称应该是游戏专用,它表示游戏中玩家操作的主角.敌人.NPC(Non Player ...

  3. [原创]cocos2d-x研习录-第二阶 概念类之场景类(CCScene)

    场景类CCScene是Cocos2D-x在屏幕显示的内容,相当于游戏关卡或界面.CCDirector任何时候只能显示一个场景CCScene,游戏中可能存在若干场景,CCDirector通过场景切换达到 ...

  4. [原创]cocos2d-x研习录-第二阶 概念类之导演类(CCDirector)

    CCDirector类是游戏的组织和控制中心(总指挥),它控制着主屏幕的显示.场景的切换和显示,以及游戏的开始.结束和暂停.它的继承关系图如下:    CCDirector继承自基类CCObject, ...

  5. [原创]cocos2d-x研习录-第二阶 概念类之摄相机类(CCCamera)

    在Cocos2D-x中,每个CCNode都拥有一个摄像机类CCCamera.只有通过CCCamera,CCNode才会被渲染出来.当CCNode发生缩放.旋转和位置变化时,都需要覆盖CCCamera, ...

  6. [原创]cocos2d-x研习录-第二阶 基本框架

    了解完Cocos2D-x的基本概念和概念类之后,是不是有一种蠢蠢欲动的冲动,想要探究Cocos2D-x是如何完成这一切的.接着我将通过对Cocos2D-x自代的HelloCpp项目进行分析,初步了解C ...

  7. [原创]cocos2d-x研习录-第二阶 基本概念

    在Cocos2D-x引擎中,有几个非常重要的概念:导演(CCDirector).摄像机(CCCamera).场景(CCSecen).布景(CCLayer).精灵(CCSPrite)和动作(CCActi ...

  8. [原创]cocos2d-x研习录-第三阶 特性之动作

    在前面的Cocos2D-x的概念类中,我们了解到节点类CCNode.导演类CCDirector.场景类CCScene.布景层类CCLayer和精灵类CCSprite等,这些类都是构成游戏画面的基本元素 ...

  9. [原创]cocos2d-x研习录—前言

    我认为很多开发者面对层出不穷的新技术.新思想和新理念,最为之苦恼的是找不到行之有效的学习方法,对于知识的本质缺乏认识,虽阅读了大量教材,却无法将其融入自己的知识体系,并搭建自己的知识树.不可否认,教材 ...

随机推荐

  1. chain.doFilter(req, resp)

    web中的Filiter过滤器: 当req不改变时,filiter在web中的配置和顺序没有关系: 但当在filiter中将其改变类型时,会导致其改变的request类型包装层次过多,无法获取其中的参 ...

  2. remot debug

    哎,首先吐槽一下,尼玛这是什么编辑器居然不能直接复制粘贴我写好的东西,废话不多说.为什么可以远程调试呢?首先JAVA运行依赖JVM,所以你可以把这种 远程debug想象成两个或者多个JVM之间按照约定 ...

  3. Chinese culture

      文房四宝 笔墨纸砚是中国古代文人书房中必备的宝贝,被称为“文房四宝”.用笔墨书写绘画在 中国可追溯到五千年前.秦(前221---前206)时已用不同硬度的毛和竹管制笔:汉代(前206—公元220) ...

  4. Android Gradle的使用

    说明: 在Android Studio中的Terminal可以直接使用Gradle命令行,不需要配置环境,而想直接在电脑的命令行使用Gradle命令行, 则需要配置环境,Window下配置Gradle ...

  5. 《Java虚拟机并发编程》学习笔记

    对<Java虚拟机并发编程>这本书真的是相见恨晚.以前对并发编程只是懂个皮毛,这本书让我对并发编程有了一个全新的认识.所以把书上的知识点做下笔记,以便以后复习使用. 并发与并行 仔细说来, ...

  6. hdu----1686 Oulipo (ac自动机)

    Oulipo Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  7. HTML“计算机输出”标签 <code><kbd><samp><tt><var><pre>

    我们并不反对使用它们,但是如果您只是为了达到某种视觉效果而使用这些标签的话,我们建议您使用样式表,那么做会达到更加丰富的效果. <code> 标签-定义计算机代码文本. 定义和用法: &l ...

  8. WCF初探-15:WCF操作协定

    前言: 在前面的文章中,我们定义服务协定时,在它的操作方法上都会加上OperationContract特性,此特性属于OperationContractAttribute 类,将OperationCo ...

  9. git在本地仓库直接使用rm彻底删除文件,服务端还是存在

    本地仓库:A和B 服务器:C 今天在本地仓库A希望删除一个文件test,于是执行以下命令: 1 2 3 4 $ sudo rm test $ git add . $ git commit -m &qu ...

  10. 苹果IOS系统SVN命令 同样适用于linux系统

    1.将文件checkout到本地目录svn checkout path(path是服务器上的目录)例如:svn checkout svn://192.168.1.1/pro/domain简写:svn ...