上面说场景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. 《K&R》里贯穿全书的代码

    个人阅读<K&R>的感觉就是:前后内容联系特别紧密,前面的代码没有理解好到了后面就看不下去. 1.getline(char s[], int lim) 调用结果:往参数数组中读入字 ...

  2. sublime text3 快捷方式汇总

    sublime text. 用过的都给赞, 哈哈-- 下面是快捷方式汇总啦: 选择类: Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次 ...

  3. docker部署tomcat

    一.环境简介 宿主机版本:ubuntu-14.04.3-server-amd64.iso JDK版本:jdk-7u76-linux-x64.tar.gz TOMCAT版本:apache-tomcat- ...

  4. mysql导入导出数据中文乱码解决方法小结

    linux系统中 linux默认的是utf8编码,而windows是gbk编码,所以会出现上面的乱码问题. 解决mysql导入导出数据乱码问题 首先要做的是要确定你导出数据的编码格式,使用mysqld ...

  5. Android性能优化篇

    很多App都会遇到以下几个常见的性能问题: 启动速度慢:界面跳转慢:事件响应慢:滑动和动画卡顿. 一.启动速度优化. 优化初始化任务: 1. 把一些初始化任务懒加载初始化 2. 把初始化任务并行化(异 ...

  6. ajax json 动态传值

    <a href="#" onclick="getRightInfo(${v.ctid})"></a> <div id=" ...

  7. Hadoop技术内幕-第一章 阅读原代码前的准备

    1.1 源代码学习环境 1.1.1 基础软件的下载 JDK-http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads ...

  8. uva 818 (位运算 + 判环)

     Cutting Chains  What a find! Anna Locke has just bought several links of chain some of which may be ...

  9. 上下文菜单项(contextMenu)----长按按钮弹出菜单项

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  10. 学习Nim语言.rar(nim语言中文教程下载)

    学习Nim语言 nim 语法上类似python ,是一门静态编译型语言,nim 使用空格缩进标示语句块的开始和结束, 喜欢python风格的程序员应该也会很容易适应和喜欢nim的风格. nim语言官方 ...