zoukankan      html  css  js  c++  java
  • Cocos2d-x 3.x序列帧动画

     

    Animation : 一个给精灵对象执行的帧动画对象。
    Animate:是将动画包装成动作的类。
    AnimationCache:管理动画的单例。

    简介

    Animation

    Animation帧动画对象包含动画帧对象,和帧间时长等等。

    1 精灵帧(SpriteFrame)
    每一个Animation对象,是由多个SpriteFrame组成。

    2 帧间隔时间(delayPerUnit)
    动画中的每两帧的间隔时间。

    3 播放次数(loops)

    Animate

    但是Animation只是包含了创建真正“动作”的必要信息,要想成为一个动作,需要使用一个Animate来包装一个Animation对象。Animate动作只能由Sprite对象执行。

    AnimationCache

    创建好的Animation,可以加到缓存中,方便以后使用。它用于缓存的动画。如果你想在缓存中保存你的动画,你应该使用这个类。

    Animation

    • 使用多个精灵帧创建动画
    createWithSpriteFrames(Vector<SpriteFrame *> frameVec);
    • 添加一个SpriteFrame到动画中
    void addSpriteFrame (SpriteFrame *frame);

    需要先将纹理打包文件.plist,通过SpriteFrameCache加载到缓存,然后获得精灵帧SpriteFrame。
    例如:

    SpriteFrameCache::getInstance()->addSpriteFramesWithFile("test.plist");
    
    SpriteFrame * frame = SpriteFrameCache::getInstance()->getSpriteFrameByName("test1.png");
    
    Animation * aniMation = Animation::create();
    aniMation->addSpriteFrame(frame);

    • 使用图片名添加一个帧,内部将会创建一个SpriteFrame并添加它。
    void addSpriteFrameWithFile (const std::string &filename);
    • 设置帧间隔时间
    void setDelayPerUnit (float delayPerUnit);
    • 设置循环次数
    void setLoops (unsigned int loops);//0表示动画不执行,1表示动画执行一次,-1表示动画循环执行。
    • 获得一个动画副本
    Animation * clone ();
    • 设置是否在动画结束时恢复至初始帧
    void setRestoreOriginalFrame (bool restoreOriginalFrame);

    Animate

    • 使用Animation对象创建动作
    static Animate * create(Animation *animation);
    • 设置动画对象
    void setAnimation(Animation *animation);
    • 获得相反的动作
    virtual Animate * reverse();
    • 获得当前的动画对象
    Animation * getAnimation();

    AnimationCache

    • 通过名字和动画添加到缓存
    void addAnimation(Animation *animation, const std::string &name);
    • 从缓存中删除一个动画
    void removeAnimation(const std::string &name);
    • 获得缓存中的动画
    Animation * getAnimation(const std::string &name);
    //返回一个之前添加的动画。 如果没有找到它将返回空。 如果你要使用它,你应该retain返回的这个拷贝

    示例

        SpriteFrame * frame = nullptr;
        Vector<SpriteFrame *> frameVec;
    
        for (int i = 1; i < frameNum; i++)
        {
            frame = SpriteFrame::create(StringUtils::format("run%d.png", i), Rect(0, 0, 130, 130));
            frameVec.pushBack(frame);
        }
    
        Animation * ani = Animation::createWithSpriteFrames(frameVec);
        ani->setLoops(-1);
        ani->setDelayPerUnit(0.1f);
    
        Animate * ac = Animate::create(ani);
    
  • 相关阅读:
    String,StringBuffer与StringBuilder的区别?
    Digui
    Digui1
    逆序
    TestOverWrite
    DemoBoxWeight
    TestSuperSub
    Cast
    TestOverWrite
    Joseph
  • 原文地址:https://www.cnblogs.com/aibox222/p/9019220.html
Copyright © 2011-2022 走看看