帧动画

来源:互联网 发布:淘宝开店认证无法拍照 编辑:程序博客网 时间:2024/05/17 21:53

动画是由一系列图片 切换产生的。 可以叫做一系列帧。


Animation  描述一个动画


Animate   动作,可以根据Animation 创建。


精灵是执行Animate  的。



Animation 有两种方式描述动画。


     一个一个图片添加。


    auto animation = Animation::create();    for( int i=1;i<15;i++)    {        char szName[100] = {0};        sprintf(szName, "Images/grossini_dance_%02d.png", i);        animation->addSpriteFrameWithFile(szName);    }    // should last 2.8 seconds. And there are 14 frames.    animation->setDelayPerUnit(2.8f / 14.0f);    animation->setRestoreOriginalFrame(true);    auto action = Animate::create(animation);    _grossini->runAction(Sequence::create(action, action->reverse(), nullptr));    


    .通过plist文件初始化。


    auto cache = AnimationCache::getInstance();    cache->addAnimationsWithFile("animations/animations-2.plist");    auto animation2 = cache->getAnimation("dance_1");   //plist文件中的 名字    auto action2 = Animate::create(animation2);    _tamara->runAction(Sequence::create(action2, action2->reverse(), nullptr));


第二个例子 应用了精灵帧缓存     降低了资源消耗


1. static AnimationCache* getInstance(),全局共享的单例2. void addAnimation(Animation *animation, const std::string& name),添加一个动画到缓存3. void addAnimationsWithFile(const std::string& plist),添加动画文件到缓存4. void removeAnimation(const std::string& name),移除一个指定的动画5. Animation* getAnimation(const std::string& name),获得事先存入的动画


建议:在内存警告时我们应该加入如下的清理缓存操作:
  1. void releaseCaches() 
  2. AnimationCache::destroyInstance(); 
  3. SpriteFrameCache::getInstance()->removeUnusedSpriteFrames(); 
  4. TextureCache::getInstance()->removeUnuserdTextures(); 
 
值得注意的是清理的顺序,我们推荐先清理动画缓存,然后清理精灵帧缓存,最后是纹理缓存。按照引用层级由高到低,以保证释放引用有效。
 


0 0
原创粉丝点击