文章目录
- Sprite
- TextureProtocol
- BlendProtocol
- Texture2D
- TextureCache
-
- 简介
- 属性介绍
- 函数介绍
-
- void addImageAsync(const string &path, const function<void(Texture2D*)>& callback, const string& callbackKey)
- void unbindImageAsync(const string& callbackKey)
- void loadImage()
- void addImageAsyncCallBack(float dt)
- Texture2D* addImage(const string &path)
- void parseNinePatchImage(Image *image, Texture2D *texture, const string& path)
- bool reloadTexture(const string& fileName)
- void removeAllTextures()
- void reloadAllTextures()
- void waitForQuit()
- string getCachedTextureInfo() const
- AsyncStruct
- TextureAtlas
- SpriteBatchNode
- SpriteFrame
- SpriteFrameCache
- 相关OpenGL函数
Sprite
简介
Sprite是一个显示2D图像的节点,可以根据图片、纹理、精灵帧(或其一部分矩形区域)创建。使用图片创建时,会先根据文件名从TextureCache中查找纹理缓存,详情参见TextureCache。
渲染模式
QUAD(默认模式)
渲染一个矩形区域(由两个三角形构成),内存占用较小,但在图片未填满矩形区域的情况下会渲染空像素(较慢)。
POLYGON
使用大量三角形区域(数量由设置决定)进行渲染,占用内存较多,但可以避免渲染大量的空像素(较快)。可以调用setPolygonInfo()更换到此模式。
SLICE9
将图片分为3*3的区域,渲染9个矩形区域(由18个三角形区域构成),中间的矩形区域可以进行拉伸,而其他8个区域保持不变,一般用于不定长图形等。可以调用setCenterRect()或serCenterRectNormalized()更换到此模式。
QUAD_BATCHNODE
多个节点在一个批次中渲染的模式,但有许多限制,详情参见SpriteBatchNode。将节点添加至SpriteBatchNode的子节点中即更换到此模式。
优化渲染
- 使用SpriteFrameCache中的图集创建Sprite,详情参见SpriteFrameCache。
- 多个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同样