Skip to content

cocos2d x 3.3 010 核心概念和相关类 精灵

cheyiliu edited this page Jan 19, 2015 · 6 revisions

精灵概述

  • 终于迎来了cocos里面的第一个可见对象,精灵,小兴奋下(导演是幕后英雄;node是基类,是"void" object,主要定义公共属性和行为; scene是容器; layer是容器和负责事件监听)
  • 精灵继承自Node,实现接口TextureProtocol
    • TextureProtocol接口继承BlendProtocol接口;BlendProtocol定义了setBlendFunc,getBlendFunc;TextureProtocol定义了getTexture,setTexture
  • 简单说精灵就是一个2d图片
  • 精灵用的好坏会影响内存开销和性能,一般优化方法有:
    • 小图拼大图
    • 用同样的blending function
    • use sprite 'batch'

主要API

  • create系列, create createWithXXX
  • 来自基类接口的, setTexture setTexture setBlendFunc getBlendFunc
  • 来自node的一些属性相关和addChild等
  • batchNode相关,get set
  • texutreRect相关, get set
  • spritFrame相关, set get isDisplay
  • TextureAtlas相关,get set
  • flippedX, flippedY相关, set is
  • other

走马观花看代码

1. create init系列, 两段构造, 仅列出有哪些
Sprite* Sprite::createWithTexture(Texture2D *texture)
Sprite* Sprite::createWithTexture(Texture2D *texture, const Rect& rect, bool rotated)
Sprite* Sprite::create(const std::string& filename)
Sprite* Sprite::create(const std::string& filename, const Rect& rect)
Sprite* Sprite::createWithSpriteFrame(SpriteFrame *spriteFrame)
Sprite* Sprite::createWithSpriteFrameName(const std::string& spriteFrameName)

2. 析构
Sprite::~Sprite(void)
{
    CC_SAFE_RELEASE(_texture);
}

3. Texture相关,纹理是opengl的概念,这里作了包装,简单理解它就是图片吧
void Sprite::setTexture(const std::string &filename)
void Sprite::setTexture(Texture2D *texture)
void Sprite::setTextureRect(const Rect& rect)


4. 跟opengl绘制密切相关的,啃不动对应的代码了
void Sprite::setTextureCoords(Rect rect)
void Sprite::updateTransform(void)
void Sprite::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)

5. child相关
void Sprite::addChild(Node *child, int zOrder, int tag)
void Sprite::reorderChild(Node *child, int zOrder)
void Sprite::removeChild(Node *child, bool cleanup)
都是在Node这个基类的逻辑上增加了_batchNode相关的逻辑

6. 来自Node的属性设置
void Sprite::setPosition(const Vec2& pos)
void Sprite::setRotation(float rotation)
void Sprite::setRotationSkewX(float fRotationX)
void Sprite::setScale(float fScale)
等等, 都是在Node的基础上增加了setdirty逻辑

7. set get for精灵新增的两个属性_flippedX _flippedY

8. rgb相关
void Sprite::updateColor(void)
void Sprite::setOpacityModifyRGB(bool modify)

9. Frames相关
void Sprite::setSpriteFrame(const std::string &spriteFrameName)
void Sprite::setSpriteFrame(SpriteFrame *spriteFrame)
void Sprite::setDisplayFrameWithAnimationName(const std::string& animationName, ssize_t frameIndex)
bool Sprite::isFrameDisplayed(SpriteFrame *frame) const

10. BatchNode相关
set/get

11. Texture protocol相关
void Sprite::updateBlendFunc(void)

小结

  • 精灵的重要代码都和opengl相关, 但从概念上不妨碍我们的理解。 精灵继承自Node的同时实现了TextureProtocol, 简单说精灵就是一个2d图片
  • 精灵继承了Node的所有属性, 因此可以移动,旋转,缩放,执行动画等
  • 除了具有Node的所有属性之外,精灵类还新增了_flippedX _flippedY _texture等属性, 因此能被翻转和被opengl绘制等

填坑进行时

相关链接

Clone this wiki locally