Cocos2d-x 之精灵帧 SpriteFrame

写在前面

前面介绍精灵Sprite和贴图Texture2D的时候都有涉及到精灵帧SpriteFrame,这三个的关系可以粗略看成,Texture2D是封装了一张图片的相关信息,SpriteFrame是对Texture2D的再次封装,可用于创建帧动画,而Sprite是对Texture2D和SpriteFrame的再次封装,以实现一个包含图片信息的“角色”,可执行各种动作和交互。这篇文章我们先说一下SpriteFrame,然后再对这三个对象的用法进行总结。

精灵帧SpriteFrame

精灵帧可以直接使用图片或贴图创建,但一般都是从精灵帧 缓冲区中获取,如果缓冲区没有才创建,并加入到缓冲区,以便下次直接从缓冲区取。

    //从精灵获取
    auto sprite = Sprite::create("girl.png");
    //auto frame = sprite->getSpriteFrame();

    //用图片文件创建
    //auto frame = SpriteFrame::create("girl.png", Rect(0, 0, 150, 200));
    //用贴图创建
    TextureCache::getInstance()->addImage("girl.png");
    auto texture = TextureCache::getInstance()->getTextureForKey("girl.png");
    auto frame = SpriteFrame::createWithTexture(texture, Rect(0, 0, 150, 200));

    //加入到精灵帧缓冲区
    SpriteFrameCache::getInstance()->addSpriteFrame(frame,"girl");
    //以文件格式加入到精灵帧缓冲区
    SpriteFrameCache::getInstance()->addSpriteFramesWithFile("start.plist");

    //从精灵帧缓冲区中获取
    auto frame2 = SpriteFrameCache::getInstance()->getSpriteFrameByName("start1.png");

    auto sp = Sprite::createWithSpriteFrame(frame);
    this->addChild(sp);
    sp->setPosition(visibleSize / 2);
    sp->setAnchorPoint(Vec2(0.5, 0.5));

Sprite SpriteFrame Texture2D总结

  • SpriteFrame有对应的SpriteFrameCache

加入精灵帧的方法有

addSpriteFrame(SpriteFrame*,const std::string&)
addSpriteFrameWithFileContent(const std::string&,Texture2D*)
addSpriteFrameWithFile(const std::string&)

获取精灵帧的方法有

getSpriteFrameByName(const std::string&)
  • Texture2D有对应的TextureCache

加入2D贴图的方法有

addImage(Image*,const std::string&)
addImage(const std::string&)
addImageAsync(const std::string&,const std::function<void(Texture2D*)>&)

获取2D贴图的方法有

getTextureForKey(const std::string&)
  • Sprite 与 SpriteFrame
Sprite* sp=Sprite::createWithSpriteFrame(SpriteFrame*)
Sprite* sp=Sprite::createWithSpriteFrameName(const std::string&)
SpriteFrame* sf=sp->getSpriteFrame()
  • Sprite 与 Texture2D
Sprite* sp=Sprite::createWithTexture(Texture2D*,cosnt Rect&,bool)
Texture2D* texture=sp->getTexture()
  • SpriteFrame 与 Texture2D
SpriteFrame* sf=SpriteFrame::createWithTexture(Texture2D*,const Rect&)
Texture2D* texture=sf->getTexture()

该用哪种方式?

  • 对Texture2D来说,只对特定已知的Sprite或SpriteFrame,才会从这个精灵(帧)那里拿贴图,当我们要手动加载贴图时用Texture2D来加载。

  • 对SpriteFrame来说,只对特定已知的Sprite或Texture2D,才会从这个精灵那里拿精灵帧,或者用已知的贴图创建精灵帧。精灵帧一般是用来做帧动画的,所以更多的用法是加载Plist文件到SpriteFrameCache,然后从SpriteFrameCache拿,或者直接用图片文件创建然后加入到SpriteFrameCache。

  • 对Sprite来说,可以直接用图片文件创建,也可以用贴图或者精灵帧创建,如果我们某个图片(精灵帧)创建,否则用图片文件创建。对于经常用到的文件,建议先加载到贴图缓冲区或精灵帧缓冲区,后面需要用到时从缓冲区取。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值