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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值