Cocos2d-x C++ Sprite、Texture2D、TextureCache、SpriteBatchNode、SpriteFrame、SpriteFrameCache及相关类 源码简析

文章目录Sprite简介渲染模式QUAD(默认模式)POLYGONSLICE9QUAD_BATCHNODE优化渲染属性介绍当节点由图集渲染时使用以下属性texture atlas、atlas indexbatch node当节点由自身渲染时使用以下属性blend functexture、rect、rect rotated当节点渲染模式为slice 9使用以下属性center rect normal...
摘要由CSDN通过智能技术生成

文章目录

Sprite

简介

Sprite是一个显示2D图像的节点,可以根据图片、纹理、精灵帧(或其一部分矩形区域)创建。使用图片创建时,会先根据文件名从TextureCache中查找纹理缓存,详情参见TextureCache。

渲染模式

QUAD(默认模式)

渲染一个矩形区域(由两个三角形构成),内存占用较小,但在图片未填满矩形区域的情况下会渲染空像素(较慢)。

POLYGON

使用大量三角形区域(数量由设置决定)进行渲染,占用内存较多,但可以避免渲染大量的空像素(较快)。可以调用setPolygonInfo()更换到此模式。

SLICE9

将图片分为3*3的区域,渲染9个矩形区域(由18个三角形区域构成),中间的矩形区域可以进行拉伸,而其他8个区域保持不变,一般用于不定长图形等。可以调用setCenterRect()或serCenterRectNormalized()更换到此模式。

SLICE9渲染模式的应用

QUAD_BATCHNODE

多个节点在一个批次中渲染的模式,但有许多限制,详情参见SpriteBatchNode。将节点添加至SpriteBatchNode的子节点中即更换到此模式。

优化渲染

  1. 使用SpriteFrameCache中的图集创建Sprite,详情参见SpriteFrameCache。
  2. 多个Sprite尽量使用同一种颜色混合方式。

属性介绍

当节点由图集渲染时使用以下属性

_textureAtlas、_atlasIndex

SpriteBatchNode所用的图集及所用图片的实际下标(弱引用,不增加引用计数),详情参见TextureAtlas。

_batchNode

此节点所属的SpriteBatchNode节点(弱引用,不增加引用计数),详情参见SpriteBatchNode。

当节点由自身渲染时使用以下属性

_blendFunc

颜色混合方式,详情参见TextureProtocol。

_texture、_rect、_rectRotated

节点使用的材质、所用的矩形范围(默认为材质大小)以及矩形是否经过旋转,详情参见Texture2D。

当节点渲染模式为slice 9使用以下属性

_centerRectNormalized

指定slice 9的中心区域的矩形。

以下为通用属性

_renderMode

节点的渲染模式。

_stretchFactor、_stretchEnabled

节点的拉伸比例以及是否开启拉伸(翻转X/Y轴,设置大小等视为进行拉伸,Scale不视为拉伸)。QUAD模式需要通过此值计算偏移量,slice 9模式需要通过此值计算不同区域的矩形拉伸,Polygon和QUAD_BATCHNODE模式不使用此值。

_opacityModifyRGB

修改透明度是否会同步修改RGB数值。

_flippedX、_flippedY

是否沿X/Y轴翻转。

_insideBounds

Sprite上一帧时是否在可视边界内。

_fileName、_fileType

Sprite使用的纹理对应的图片名和类型。

_spriteFrame

Sprite使用的精灵帧。如果该Sprite不是由图集创建的,则此值为nullptr,在调用getter时才会动态的根据Texture创建SpriteFrame并返回(此节点不保持这个SpriteFrame的引用,如果值为nullptr每次调用getter都会返回新的SpriteFrame),详情参见SpriteFrame。

_trianglesCommand

存储这个节点的渲染指令。

函数介绍

void setTexture(Texture2D *texture)

设置新纹理,同时会重置纹理区域到纹理的大小。如果将纹理置nullptr,不会使_texture变量变为nullptr而会使用一个2*2的白色默认图片取代。

void setSpriteFrame(SpriteFrame *spriteFrame)

设置新的精灵帧,如果纹理不同会同时更新纹理。

void setDisplayFrameWithAnimationName(const string& animationName, ssize_t frameIndex)

设置Sprite的SpriteFrame为从动画帧中某一时刻的SpriteFrame。

TextureProtocol

BlendProtocol的子类,在定义了颜色混合方式的基础上增加了对Texture的getter/setter。

BlendProtocol

简介

OpenGL的颜色混合协议,存储决定使用哪种颜色混合方式的变量。

BlendFunc

用来代表某种颜色混合方式的结构体,决定当节点渲染时对每个像素点如何进行颜色混合。src属性代表源节点使用的混合方式,dst代表目标节点使用的混合方式,引擎给出了几种常用的混合方式。详情参见此处

DISABLE

忽略目标点的RGBA,使用源点RGBA完全覆盖。

ALPHA_PREMULTIPLIED

目标点RGBA根据源点透明度进行修正,源点RGBA不变后进行叠加。

ALPHA_NON_PREMULTIPLIED

目标点RGBA根据源点透明度进行修正,源点RGBA同样

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值