Cocos2d-X的精灵

前端之家收集整理的这篇文章主要介绍了Cocos2d-X的精灵前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


课程概述

“Cocos2d-X的精灵”课程概述

游戏中存在着大量的精灵元素,本节课讲从游戏引擎源码的角度详解精灵。

课程笔记

精灵的创建

精灵通常是通过texture创建,将texture的全部或者一部分与sprite进行关联。创建方法除了createWithTexture,其他方法都会将对应的texture存入textureCache中。针对手动创建的texture2D,需要小心管理其内存。可以通过setTexture动态设置Sprite的Texture。

Sprite包含类型为V3F_C4B_T2F_Quad的成员变量,该变量包含了Sprite四个顶点的顶点坐标、颜色、纹理坐标(由于OpenGL ES不支持矩阵绘制,所以绘制的时候会拆分成2个三角形进行绘制),当进行移动、缩放、旋转、扭曲、颜色叠加等操作的时候,只需要修改该成员变量即可。Sprite通过QuadCommand命令进行绘制。

颜色混合:Blend是将绘制得到的颜色与framebuffer上的颜色进行混合计算,计算方式和混合因子是通过glBlendEquation和glBlendFunc进行设置,默认的glBlendEquation为GL_FUNC_ADD,glBlendEquation为GL_SRC_ALPHA(source),GL_ONE_MINUS_SRC_ALPHA(desc)

颜色叠加:在(Cocos2d-X的UI树(2))一节中,我们学到了Node的addchild方法,在Node的addchild方法中我们用到了颜色叠加函数updateCascadeColor、updateCascadeOpacity。当Node的成员变量_cascadeColorEnabled处于开启状态(通过setCascadeColorEnabled设置,通过isCascadeColorEnabled函数读取),如果parent的_cascadeColorEnabled已经开启,将parent的_displayedColor/255*_realColor(通过Node的setColor函数设置,默认为1)传入fragment shader,通过ccshader_positiontexturecolor_nomvp中的v_fragmentColor对绘制到framebuffer的颜色产生影响。同理还有alpha叠加函数updateCascadeOpacity。在Cocos2d-X中使用TintTo、TintBy实现颜色叠加效果

精灵的优化

alpha预乘:按照默认的颜色混合,blend的时候需要将src*alpha+desc*(1-alpha),可以将src*alpha放在线下完成。然后通过:1、修改blend参数;2、在创建Image的时候设置_hasPremultipliedAlpha;3、在创建Texture2D的时候,当格式为PVR,设置_hasPremultipliedAlpha。

精灵表:精灵表将多个精灵合并在一起,通过一个配置文件(比如plist文件)来管理。通过spriteframecache来读取精灵表,然后通过配置文件将精灵表中的精灵存储为一个spriteframe对象,通过spriteframe创建精灵。一个精灵表对应一张texture,然后在绘制的时候借用Cocos2d-X的自动批处理机制即可实现减少绘制次数的目的。

精灵动画:关键帧动画和骨骼动画所取用的精灵均来自spriteframe,设计师设计好配置文件,然后开发者只需要通过AnimationCache获取即可。

spritebatchnode和自动批处理。spritebatchnode的缺点:只执行一次绘制,sprite的层级是相邻的。

部分拉缩,九宫格:Scale9Sprite,将一个sprite分成9分,对中间那一份进行处理。借用了spritebatchnode的处理。

原文地址:http://www.geekfaner.com/cocos2d-x/ReadCocos2dxSourceCode17.html

猜你在找的Cocos2d-x相关文章