Cocos2d-x 学习笔记(3.3) Layer
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)
本方法修改层是否能接收触摸事件,主要逻辑是:
- 参数与_touchEnabled不同时,将_touchEnabled修改为参数。
- 如果修改为true,则启用了触摸事件接收,根据触摸类型_touchMode创建相应的单点/多点触摸监听器,设置4个回调函数,并把新建的监听器赋给_touchListener。
- 如果修改为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的更多相关文章
- 【Cocos2d-x】学习笔记目录
从2019年7月开始学习游戏引擎Cocos2dx,版本3.17. 学习笔记尽量以白话的形式表达自己对源码的理解,而不是大篇幅复制粘贴源码. 本人水平有限,欢迎批评指正! Cocos2d-x 学习笔记 ...
- Cocos2d-x 3.2 学习笔记(六)Layer
Layer 游戏中的背景容器,Layer类是Node类的一个子类,它实现了触屏事件代理(TouchEventsDelegate)协议. LayerColor是Layer的一个子类,它实现了RGBAPr ...
- cocos2dx游戏开发——微信打飞机学习笔记(三)——WelcomeScene的搭建
一.场景与层的关系: cocos2dx的框架可以说主要由导演,场景,层,精灵来构成: 1.其中导演,意如其名,就是操控整个游戏的一个单例,管理着整个游戏. 2.场景就像电影的一幕剧情,所以说,懂得如何 ...
- [Cocos2d-x for WP8学习笔记] HelloWorld结构分析
先来看一下目录结构: Assets:游戏资源文件,图片音频等,Resource文件夹也有类似功能 include:用于放置游戏头文件 Shaders:渲染器着色器文件(大雾) cocos2dorig. ...
- 《Cocos2d-x游戏开发实战精解》学习笔记4--实战一个简单的钢琴
上一节学习了使用Cocos2d-x播放音乐的方法,但是那种方法一般只适合于播放较大的音乐,而一般比较短小的音乐(如游戏中的打斗.按键音效等)则要通过playEffect来播放.本节使用该方法以及之前学 ...
- 《Cocos2d-x游戏开发实战精解》学习笔记3--在Cocos2d-x中播放声音
<Cocos2d-x游戏开发实战精解>学习笔记1--在Cocos2d中显示图像 <Cocos2d-x游戏开发实战精解>学习笔记2--在Cocos2d-x中显示一行文字 之前的内 ...
- linux驱动开发之块设备学习笔记
我的博客主要用来存放我的学习笔记,如有侵权,请与我练习,我会立刻删除.学习参考:http://www.cnblogs.com/yuanfang/archive/2010/12/24/1916231.h ...
- [DL学习笔记]从人工神经网络到卷积神经网络_1_神经网络和BP算法
前言:这只是我的一个学习笔记,里边肯定有不少错误,还希望有大神能帮帮找找,由于是从小白的视角来看问题的,所以对于初学者或多或少会有点帮助吧. 1:人工全连接神经网络和BP算法 <1>:人工 ...
- AutoCAD学习笔记
学习笔记: **有些命令,有两到三种执行方式:菜单.命令行.对话框.如layer命令,如果在命令行打入layer命令,就会弹出对话框主y式,如果要命令行方式执行,就需要在前面加一个-号,即-layer ...
随机推荐
- eclipse查看.class文件
要使用jd-gui.exe反编译程序 步骤:window-preferences-general-editors-file associations, 如下图 上面的框选中,*.class witho ...
- 03:H.264编码原理以及视频压缩I、P、B帧
一:前言 H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称,在编码方面,我理解的他的理论依据是:参照一段时间内图像的统计结果表明,在相邻几幅图像画面中, 一般有差别的像素只有1 ...
- FPGA、GPU、CPU三者各自的优缺点是什么呢?
CPU: 英文全称:Central Processing Unit. 中文全称:中央处理器. 厂商:英特尔Intel. 功能:是一台计算机的运算核心和控制核心. 缺点:运算能力(最弱),核处理数(最少 ...
- ajax发送PUT请求,使用HttpPutFormContentFilter过滤器接受办法
相信在使用ajax发送put请求时候,肯定遇到过后端数据无法被接受到的405错误. 为什么会遇到这个问题? 1.首先查看Tomcat源码 关于如何将数据封装到Request public class ...
- vue-router之路由元信息
路由元信息?(黑人问号脸???)是不是这么官方的解释很多人都会一脸懵?那么我们说meta,是不是很多人恍然大悟,因为在项目中用到或者看到过呢? 是的,路由元信息就是我们定义路由时配置的meta字段:那 ...
- selenium-05-常见问题
一:日期控件 selenium不能直接对日期控件操作,可以通过js对日期控件做赋值操作 WebElement inputTimeBox=driver.findElement(by.name(" ...
- DeleteFolder
import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; /*** * @author ...
- 基于Docker搭建大数据集群(七)Hbase部署
基于Docker搭建大数据集群(七)Hbase搭建 一.安装包准备 Hbase官网下载 微云下载 | 在 tar 目录下 二.版本兼容 三.角色分配 节点 Master Regionserver cl ...
- ViewModel 和 ViewModelProvider.Factory:ViewModel 的创建者
本文翻译自:https://medium.com/koderlabs/viewmodel-with-viewmodelprovider-factory-the-creator-of-viewmodel ...
- idea springBoot 配置devtools实现热部署
1.pom文件依赖引入 <dependencies> <dependency> <groupId>org.springframework.boot</grou ...