【我所理解的Cocos2d-x】第六章 精灵Sprite 读书笔记
简介:
精灵是2D游戏里最重要的元素。游戏场景中大部分可见的元素都直接或间接地与精灵相关。
在Cococs2d-xz中,精灵使用Sprite表示,它将一张纹理的一部分或者全部的矩形区域绘制在屏幕上。
使用精灵表(将多个精灵合并在一个纹理上)可以减少OpenGL ES绘制的次数。
Sprite也可以用来播放动画,也可以设置其颜色,或与场景中其他元素的混合模式等
另外,一些复杂的元素,譬如地图、粒子系统、字体等,则是基于Sprite构建的。
--------------------------------------------------------------------------------------------------
1、CCSprite.h头文件定义
Sprite is a 2d image ( http://en.wikipedia.org/wiki/Sprite_(computer_graphics) )
class CC_DLL Sprite : public Node, public TextureProtocol
2、
V3F_C4B_T2F_Quad结构体,定义位于base/ccTypes.h
所有对Sprite绘制属性的修改(混合模式除外)
最终都表现为对V3F_C4B_T2F_Quad结构体类型变量quad的修改
3、Sprite的绘制方式
对于Sprite自身的draw方法,在其每一帧被调用的时候,Sprite会通过Renderer提供的
checkVisiblity方法来判断自身是否处于视窗可见范围内,如果其不可见,则不会发送任何绘制命令到OpenGL ES。
不仅减少了GPU计算的浪费,也减少了Renderer对RenderCommand进行排序的时间。
4、
除了通过修改纹理和设置不同的纹理区域使Spriite显示不同的内容,还可以:
(1)颜色混合:用来指定当前Sprite与颜色缓冲区中【相同位置】颜色值的混合方式
(2)颜色叠加:将一个颜色值作用在一个图层或者精灵上
5、
利用精灵表我们可以对同一次绘制指定更多的顶点来减少OpenGL ES的绘制次数。
Cocos2d-x使用SpriteFrameCache加载精灵表以及缓存每一个精灵的信息。、
其通过解析配置文件将精灵表中每一个精灵存储为一个SpriteFrame对象。
每一个SpriteFrame对象包含该精灵的纹理、尺寸、在纹理中的位置等信息。
需要注意的是,SpriteFrameCache并不提供移除对应于Texture2D对象对的功能。
6、
在2D游戏中,精灵动画分为关键帧动画和骨骼动画。
每个精灵动画都是由一个或多个动画组构成的,每个精灵动画都有一个配置文件来
存储这些动画组中相应的动画信息。
7、
SpriteBatchNode类
SpriteBatchNode is like a batch node: if it contains children, it will draw them in 1 single OpenGL call
其addChild方法限制其子元素只能是Sprite
并且子元素与SpriteBatchNode必须使用同一个Texture2D对象。
Node类中的visit方法用于递归遍历节点的children并且draw
而SpriteBatchNode类重写了visit方法,用于阻止元素向下遍历,将所有子元素的绘制工作交给自己处理。
8、
TextureAtlas类位于renderer/CCTextureAtlas.h
SpriteBatchNode使用TextureAtlas存储所有子精灵的顶点信息。
SpriteBatchNode所做的主要事情就是将与子元素相关的顶点信息存储至TextureAtlas中。
9、
SpriteBatchNode适合那些比较简单的模型,他们的子元素只能来自同一个纹理,
这些子元素也都位于同一相邻层级,甚至不会重叠。
10、
Scale9Sprite根据九宫格的分布构造了9个Sprite元素,只对中间的Sprite进行缩放
这些Sprite全部被假如一个SpriteBatchNode中。
【我所理解的Cocos2d-x】第六章 精灵Sprite 读书笔记的更多相关文章
- 《Java并发编程实战》第六章 任务运行 读书笔记
一. 在线程中运行任务 无限制创建线程的不足 .线程生命周期的开销很高 .资源消耗 .稳定性 二.Executor框架 Executor基于生产者-消费者模式.提交任务的操作相当于生产者.运行任务的线 ...
- 图解 TCP/IP 第六章 TCP与UDP 笔记6.1 传输层的作用
图解 TCP/IP 第六章 TCP与UDP 笔记6.1 传输层的作用 传输层必须指出这个具体的程序,为了实现这一功能,使用端口号这样一种识别码.根据端口号,就可以识别在传输层上一层的应用程 ...
- 《深入理解java虚拟机》第六章 类文件结构
第六章 类文件结构 6.2 无关性的基石 各种不同平台的虚拟机与所有的平台都统一使用的程序存储格式--字节码(ByteCode)是构成平台无关性的基石.java虚拟机不和包括java在内的任何语言 ...
- 【深入理解计算机系统CSAPP】第六章 存储器层次结构
6 存储器层次结构 存储器系统(memory system)是一个具有不同容量.成本和访问时间的存储设备的层次结构.CPU 寄存器保存着最常用的数据.靠近 CPU 的小的.快速的高速缓存存储器(cac ...
- 简单直白的去理解AOP,了解Spring AOP,使用 @AspectJ - 读书笔记
AOP = Aspect Oriental Programing 面向切面编程 文章里不讲AOP术语,什么连接点.切点.切面什么的,这玩意太绕,记不住也罢.旨在以简单.直白的方式理解AOP,理解Sp ...
- 0005-20180422-自动化第六章-python基础学习笔记
day6 内容回顾: 1. 变量 2. 条件 3. while循环 4. 数据类型 - int - bit_length - bool - True/False - str - upper - low ...
- 《深入理解Nginx:模块开发与架构解析》读书笔记
1.nginx的特点:快.扩展性强.可靠性强.内存低消耗.支持高并发.热部署.开源免费 2.nginx由master进程来管理多个(CPU数)worker进程 3.配置按功能分,有4类: 1)用于调试 ...
- 深入理解 C 指针阅读笔记 -- 第六章
Chapter6.h #ifndef __CHAPTER_6_ #define __CHAPTER_6_ /*<深入理解C指针>学习笔记 -- 第六章*/ typedef struct _ ...
- 《深入理解java虚拟机》读书笔记五——第六章
第六章 类文件结构 1.无关性的基石 各种不同平台的虚拟机与所有平台都统一使用程序存储格式——字节码是构成平台无关的基石. 实现语言无关性的基础仍然是虚拟机和字节码存储格式,Java虚拟机不和包括Ja ...
随机推荐
- day 2
三目运算符 A?B:C 等价于 if(A) B; else C; 实例: int i: i=(3>2?5:1) //如果3>2为真,i的值为5,否则为1 printf(“%d”,i): ...
- Scrum Meeting 9-20151211
任务安排 姓名 今日任务 明日任务 困难 董元财 请假(参加编译测试) 无 胡亚坤 首页界面优化 无 刘猛 请假(参加编译测试) 无 马汉虎 请假(参加编译测试) 无 赖彦俞 请假(参加编译测试) 无 ...
- 使用 InstallShield 制作 Delphi 软件安装包
软件版本: InstallShield 12 Delphi 5/7 SQL Server 2005 一.配置软件信息 二.软件安装的需求配置 三.安装架构 四.安装需要的文件 软件的安装路径.可执行文 ...
- flash的动态加载技术
这里所说的动态加载技术, 主要是指代码模块(可以是swc也可以是swf)的动态加载.即主swf在运行的时候, 可以根据需要动态加载所需的代码模块. 为了讨论方便, 下面所说的代码模块都用swc表示,用 ...
- Modify textures at runtime
动态修改Texture Modify textures at runtime?http://answers.unity3d.com/questions/7906/modify-textures-at- ...
- HTML5的 2D SVG和SVG DOM的学习笔记(2)---SVG动画
SVG支持动画.可以通过以下几种方法获得动画效果: 使用SVG动画元素.SVG可以描述随时间变化的图形对象,使用不同的动画元素可以定义运动路径,淡入淡出效果和对象的膨胀.收缩.旋转和变换颜色. 使用S ...
- iOS开发UI篇—无限轮播(循环展示)
iOS开发UI篇—无限轮播(循环展示) 一.简单说明 之前的程序还存在一个问题,那就是不能循环展示,因为plist文件中只有五个数组,因此第一个和最后一个之后就没有了,下面介绍处理这种循环展示问题的小 ...
- sublime text3安装相关知识粗略整理
1.注册码 网上去搜最新的比较好,因为旧的很可能都用不了,所以把注册码记下来也没必要. 2.安装Package Control ctrl+`,弹出打开控制台,输入代码后回车安装 import url ...
- java中byte, int的转换
最近在做些与编解码相关的事情,又遇到了byte和int的转换,看着那些关于反码.补码的说明依旧头疼,还是记下些实用的方法吧.int -> byte可以直接使用强制类型转换: byte b = ( ...
- poj2240 floyd
//Accepted 732 KB 782 ms //floyd应用 #include <cstdio> #include <cstring> #include <ios ...