• 【我所理解的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中。

  • 相关阅读:
    024 Go语言基础之文件操作
    023 Go语言标准库之log
    022 Go语言标准库之flag
    021 Go语言标准库之time
    019 Go语言基础之单元测试
    020 Go语言标准库之fmt
    数据导出为Excel(未完)
    .net+EF+mvc通过EasyUI的DataGrid实现增删改查
    EasyUI入门,DataGrid(数据表格)
    基于jQuery的用户界面插件集合---EasyUI
  • 原文地址:https://www.cnblogs.com/MyGameAndYOU/p/4557581.html
Copyright © 2020-2023  润新知