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 ...
随机推荐
- ACM团队招新赛题解
标程代码全部为C语言编写.代码中的#if LOCAL_ 至#endif为本地一些调试内容,可以忽略. Xenny的A+B(1)[容易][签到] 签到题,做不出的话可能你有点不太适合ACM了. Xenn ...
- 自定义 behavior - 完美仿 QQ 浏览器首页,美团商家详情页
使用CoordinatorLayout打造各种炫酷的效果 自定义Behavior -- 仿知乎,FloatActionButton隐藏与展示 NestedScrolling 机制深入解析 一步步带你读 ...
- Elastic Stack 笔记(二)Elasticsearch5.6 安装 IK 分词器和 Head 插件
博客地址:http://www.moonxy.com 一.前言 Elasticsearch 作为开源搜索引擎服务器,其核心功能在于索引和搜索数据.索引是把文档写入 Elasticsearch 的过程, ...
- Uva 232 一个换行WA 了四次
由于UVA OJ上没有Wrong anwser,搞的多花了好长时间去测试程序,之前一直以为改OJ有WA,后来网上一搜才知道没有WA,哎哎浪费了好长时间.此博客用来记录自己的粗心大意. 链接地址:htt ...
- day 3 总结
- vscode主题安装
安装主题 快捷键Ctrl+Shift+X打开安装插件 搜索Monokai ST3 切换主题 显示效果 安装文件图标 扩展插件vscode-icon 鼠标滚轮设置字体大小 打开setting.json文 ...
- [C++]invalid initialization of non-const reference of type 'std::__cxx11::string& {aka std::__cxx11::basi
解决方法:在参数前面加一个cosnt或者把引用符号去掉
- 单线程Redis性能为何如此之高?
文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 实际项目开发中现在无法逃避的一个问题就是缓存问题,而缓存问题也是面试必问知识点之一,如果面试官好一点可能会简单 ...
- pathlib模块
一.pathlib库官方定义 pathlib 是Python内置库,Python 文档给它的定义是 Object-oriented filesystem paths(面向对象的文件系统路径).path ...
- FPipe端口转发
目录 0x01 FPipe介绍 0x02 端口转发 0x03 msf正向上线 注: 边界机器 win08 192.168.222.175 内网机器 win7 192.168.222.137 msf机器 ...