1.简介

Layer直接继承了Node。Layer类似Ps里图层的概念,也可以理解成一块透明玻璃。Scene类似Ps里的一张图像,也可以理解成堆放玻璃的箱子。

Layer能接收触摸事件、键盘事件、加速器事件。

导演类一次只能将一个Scene显示,例如存在登录场景、菜单场景、游戏场景,一个时刻只能一个场景被运行。

一个Scene可以包含多个Layer,例如游戏场景可以包含人物层、背景层、导航菜单栏层。每个Layer都包含了一些元素。

每个元素都有自己的动作。

2. Layer与触摸

Layer里触摸相关成员:

    bool _touchEnabled; // 是否启用触摸
EventListener* _touchListener; //触摸监听器
Touch::DispatchMode _touchMode; //触摸类型 单点or多点
bool _swallowsTouches; //吞没

Layer里有两种触摸共8个触摸监听器的回调函数,可以被继承Layer的子类重写。

void setTouchEnabled(bool value)

本方法修改层是否能接收触摸事件,主要逻辑是:

  1. 参数与_touchEnabled不同时,将_touchEnabled修改为参数。
  2. 如果修改为true,则启用了触摸事件接收,根据触摸类型_touchMode创建相应的单点/多点触摸监听器,设置4个回调函数,并把新建的监听器赋给_touchListener。
  3. 如果修改为false,则关闭了触摸事件接收,从事件分发器中remove _touchListener, 并把_touchListener置空。

void setTouchMode(Touch::DispatchMode mode)

void setSwallowsTouches(bool swallowsTouches)

这两个方法会调用到上面的方法。setTouchMode两方法里,当启用了触摸时,setSwallowsTouches方法里,在修改要set的变量后,会执行:

            setTouchEnabled(false);
setTouchEnabled(true);

第一行能将当前的监听器删除,第二行能根据_touchMode重新设置监听器。

3. LayerColor

颜色层直接继承了层Layer、颜色混合BlendProtocol。

颜色层在层的基础上,新增了:不透明度、RGB颜色、颜色混合。

有3种create方法创建颜色层。参数里可以设置RGBA数值和窗口大小:

LayerColor * LayerColor::create(const Color4B& color, GLfloat width, GLfloat height)

当不设置create参数时,使用默认值,即父类Layer的透明背景:

    Size s = Director::getInstance()->getWinSize();
return initWithColor(Color4B(,,,), s.width, s.height);

构造方法里设置了默认的颜色混合:

LayerColor::LayerColor()
{
// default blend function
_blendFunc = BlendFunc::ALPHA_PREMULTIPLIED;
}

可以修改颜色层的属性:

void changeWidthAndHeight(GLfloat w ,GLfloat h)
void changeWidth(GLfloat w)
void changeHeight(GLfloat h) BlendFunc& getBlendFunc()void setBlendFunc(const BlendFunc& blendFunc)void Node::setOpacity(GLubyte opacity)
void Node::setColor(const Color3B& color)

4.  LayerGradient

颜色渐变层LayerGradient直接继承了颜色层LayerColor。

除了有颜色层的RGBA、颜色混合,渐变层还有这些属性:渐变方向、渐变起终点颜色、渐变起终点透明度。

颜色渐变是从_startColor变换到_endColor,渐变方向为向量Vec2 _alongVector。

有3种create方法创建。可以带参数起终点颜色和方向向量实现渐变效果:

LayerGradient* LayerGradient::create(const Color4B& start, const Color4B& end, const Vec2& v)

当不设置create参数,默认起终点颜色是黑,方向由上至下,起终点透明度为255,效果类似于层Layer:

initWithColor(Color4B(, , , ), Color4B(, , , ));
initWithColor(start, end, Vec2(, -));

5. LayerRadialGradient

实现了颜色的径向变换。

6. LayerMultiplex

能管理多个层。

用容器Vector<Layer*> _layers存储layer,用_enabledLayer记录当前最后执行的layer。

用this->addChild(_layers.at(n))方法把某个layer加到当前场景中。

create方法可以传入多个layer:

LayerMultiplex* LayerMultiplex::createWithArray(const Vector<Layer*>& arrayOfLayers)
LayerMultiplex * LayerMultiplex::create(Layer * layer, ...)

能够切换当前layer,添加layer:

LayerMultiplex::switchTo(int n)
LayerMultiplex::addLayer(Layer* layer)

-

‎Cocos2d-x 学习笔记(3.3) Layer的更多相关文章

  1. 【Cocos2d-x】学习笔记目录

    从2019年7月开始学习游戏引擎Cocos2dx,版本3.17. 学习笔记尽量以白话的形式表达自己对源码的理解,而不是大篇幅复制粘贴源码. 本人水平有限,欢迎批评指正! Cocos2d-x 学习笔记 ...

  2. Cocos2d-x 3.2 学习笔记(六)Layer

    Layer 游戏中的背景容器,Layer类是Node类的一个子类,它实现了触屏事件代理(TouchEventsDelegate)协议. LayerColor是Layer的一个子类,它实现了RGBAPr ...

  3. cocos2dx游戏开发——微信打飞机学习笔记(三)——WelcomeScene的搭建

    一.场景与层的关系: cocos2dx的框架可以说主要由导演,场景,层,精灵来构成: 1.其中导演,意如其名,就是操控整个游戏的一个单例,管理着整个游戏. 2.场景就像电影的一幕剧情,所以说,懂得如何 ...

  4. [Cocos2d-x for WP8学习笔记] HelloWorld结构分析

    先来看一下目录结构: Assets:游戏资源文件,图片音频等,Resource文件夹也有类似功能 include:用于放置游戏头文件 Shaders:渲染器着色器文件(大雾) cocos2dorig. ...

  5. 《Cocos2d-x游戏开发实战精解》学习笔记4--实战一个简单的钢琴

    上一节学习了使用Cocos2d-x播放音乐的方法,但是那种方法一般只适合于播放较大的音乐,而一般比较短小的音乐(如游戏中的打斗.按键音效等)则要通过playEffect来播放.本节使用该方法以及之前学 ...

  6. 《Cocos2d-x游戏开发实战精解》学习笔记3--在Cocos2d-x中播放声音

    <Cocos2d-x游戏开发实战精解>学习笔记1--在Cocos2d中显示图像 <Cocos2d-x游戏开发实战精解>学习笔记2--在Cocos2d-x中显示一行文字 之前的内 ...

  7. linux驱动开发之块设备学习笔记

    我的博客主要用来存放我的学习笔记,如有侵权,请与我练习,我会立刻删除.学习参考:http://www.cnblogs.com/yuanfang/archive/2010/12/24/1916231.h ...

  8. [DL学习笔记]从人工神经网络到卷积神经网络_1_神经网络和BP算法

    前言:这只是我的一个学习笔记,里边肯定有不少错误,还希望有大神能帮帮找找,由于是从小白的视角来看问题的,所以对于初学者或多或少会有点帮助吧. 1:人工全连接神经网络和BP算法 <1>:人工 ...

  9. AutoCAD学习笔记

    学习笔记: **有些命令,有两到三种执行方式:菜单.命令行.对话框.如layer命令,如果在命令行打入layer命令,就会弹出对话框主y式,如果要命令行方式执行,就需要在前面加一个-号,即-layer ...

随机推荐

  1. JSP实例:彩色验证码

    本例使用一个JavaBean,名为Image.java,包com.zempty.bean下; 三个JSP文件,分别为image.jsp.login.jsp.check.jsp.其中login.jsp是 ...

  2. 大数据平台搭建 - cdh5.11.1 - hadoop集群安装

    一.前言 由于线下测试的需要,需要在公司线下(测试)环境搭建大数据集群. 那么CDH是什么? hadoop是一个开源项目,所以很多公司再这个基础上进行商业化,不收费的hadoop版本主要有三个,分别是 ...

  3. valueForKey与valueForKeyPath 区别

    1.删除数组中重复的数据 2.valueForKeyPath:可以深层次取到子属性,不管隐藏的多深  valueForKey:无法取到深层次子属性 但是也有其相似的地方: 比如:快速找到字典数组中ke ...

  4. CoDeSys

    CoDeSys是全球最著名的PLC内核软件研发厂家德国的3S(SMART,SOFTWARE,SOLUTIONS)公司出的一款与制造商无关的IEC 61131-1编程软件.CoDeSys 支持完整版本的 ...

  5. Elastic Stack 笔记(十)Elasticsearch5.6 For Hadoop

    博客地址:http://www.moonxy.com 一.前言 ES-Hadoop 是连接快速查询和大数据分析的桥梁,它能够无间隙的在 Hadoop 和 ElasticSearch 上移动数据.ES ...

  6. 001:photoshop教程

    1:添加辅助线:有个位移的坐标系图标:点击标志中,鼠标按着不动.之后拖动到对应的位置. 2:量距离:第一行.第二个图标.直接测量像素. 3:切割图片: 3.1:第三行.第一列:选择切片工具 3.2:之 ...

  7. 了解Java线程优先级,更要知道对应操作系统的优先级,不然会踩坑

    Java 多线程系列第 6 篇. 这篇我们来看看 Java 线程的优先级. Java 线程优先级 Thread 类中,使用如下属性来代表优先级. private int priority; 我们可以通 ...

  8. spring与logstash整合,并将数据传输到Elasticsearch

    logstash是一个开源的数据收集引擎,支持各种输入选择,能够同时从多个来源采集数据,将数据转发到想存储的“库”中,例如,可以转发存储到Elasticsearch,也可以转发到kafka等消息中间件 ...

  9. 2018年蓝桥杯java b组第三题

    标题:复数幂 设i为虚数单位.对于任意正整数n,(2+3i)^n 的实部和虚部都是整数.求 (2+3i)^123456 等于多少? 即(2+3i)的123456次幂,这个数字很大,要求精确表示. 答案 ...

  10. 【Python笔记】Python变量类型

    Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据 ...