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. 解决chrome浏览器崩溃,再次安装不上问题

    上网重新下载了个安装包,发现安装包都打不来 很绝望,查了很多资料 很多人说要删除注册表的东西 但是打开注册表,发现一堆google的东西,手动删根本不现实 在绝望中看到了解决方案:google Upd ...

  2. Java连载32-对象、类及其关系与定义

    一.采用面向对象的方式开发一个软件,生命周期之中: (1)面向对象的分析:OOA (2)面向对象的设计:OOD (3)面向对象的编程:OOP 二.类 定义:类在现实世界世界之中是不存在的,是一个模板, ...

  3. 最近学习到的Lambda表达式

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 中秋去了躺上海,在外滩上打了个卡: 紧接着学了一下J ...

  4. 【linux】【tomcat】tomcat8.5安装

    系统环境:Centos7 1.下载tomcat8.5 wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.45/b ...

  5. 使用netsh来进行端口转发

    目录 0x00 简介 0x01 2003命令介绍 0x02 2003以后命令介绍(以08为例) 0x03 实际利用案例 0x04 流量转发 0x00 简介 netsh(Network Shell) 是 ...

  6. linux环境下Nginx的安装

    因为工作环境大多数都是windows server服务器,仅有的linux服务器同事们都在抢着用,所以特意买了一台阿里云服务器,感兴趣的小伙伴可以了解一下,一年只要293: https://promo ...

  7. setInterval、setTimeout之遗忘的第三个参数

    今天看阮一峰老师的ES6入门,在一个关于promise的小demo里,老师用到了setTimeout的第三个参数,惊了有没有,定时器还有第三个参数? 喏就是下面这个demo: function tim ...

  8. 制定一个学习liunx的目标

        制定一个学习liunx的目标       学习目标方法 1.在这五个月的学习时间里,制定一套自己的学习方式. 2.养成做笔记以及写博客的习惯 . 3.坚持上课前预习,自习时间总结 . 4.紧跟 ...

  9. [系列] go-gin-api 路由中间件 - Jaeger 链路追踪(六)

    [DOC] 概述 首先同步下项目概况: 上篇文章分享了,路由中间件 - Jaeger 链路追踪(理论篇),这篇文章咱们接着分享:路由中间件 - Jaeger 链路追踪(实战篇). 这篇文章,确实让大家 ...

  10. Dubbo源码解析(一)服务发现

    一.Dubbo源码模块 官网地址 源码地址 1.1 源码模块组织 Dubbo工程是一个Maven多Module的项目,以包结构来组织各个模块. 核心模块及其关系,如图所示: 1.2 模块说明 dubb ...