标签:style http os 使用 io for 文件 ar div
Cocos2d-x中,动画的具体内容是依靠精灵显示出来的,为了显示动态图片,我们需要不停切换精灵显示的内容,通过把静态的精灵变为动画播放器从而实现动画效果。动画由帧组成,每一帧都是一个纹理,我们可以使用一个纹理序列来创建动画。
我们使用Animation类描述一个动画,而精灵显示动画的动作则是一个Animate对象。动画动作Animate是精灵显示动画的动作,动画与动画动作的关系如同CD光盘与CD播放机的关系,前者记录了动画的内容,后者是播放动画的工具,它由一个动画对象创建,并由精灵执行。
手动添加的方法需要将每一帧要显示的精灵有序添加到Animation类中,并设置每帧的播放时间,让动画能够匀速播放。另外,还要通过setRestoreOriginalFrame
来设置是否在动画播放结束后恢复到第一帧。创建好Animation实例后,需要创建一个Animate实例来播放序列帧动画。代码如下:
auto animation = CCAnimation::create();
for(int i = 1;i < 5;i++)
{
char str[10] = {0};
sprintf(str,"0%d.png",i);
animation->addSpriteFrameWithFile(str);
}
animation->setDelayPerUnit(2.5f/14.0f); //2.5秒内实现14帧的播放
animation->setRestoreOriginalFrame(true);
animation->setLoops(-1);
auto animate = CCAnimate::create(animation);
sprite->runAction(CCRepeatForever::create(CCSequence::create(animate,NULL)));
在创建Animation实例时会用到以下几个接口:
addSpriteFrame
,添加精灵帧到Animation实例setDelayUnits
,设置每一帧持续时间,以秒为单位setRestoreOriginalFrame
,设置是否在动画播放结束后恢复到第一帧首先我们来了解下需要用到的AnimationCache类。AnimationCache可以加载xml/plist文件,plist文件里保存了组成动画的相关信息,通过该类获取到plist文件里的动画。
auto cache = AnimationCache::getInstance();
cache->addAnimationsWithFile("animations.plist");
auto animation2 = cache->getAnimation("animation"); // 其中animation可以换成上面讲的str,str的获得和上面的方法所用相同
auto action2 = Animate::create(animation2);
sprite->runAction(Sequence::create(action2, action2->reverse(), NULL));
还可以有另一种写法:
在使用AnimationCache类时会用到以下几个接口:
addAnimationsWithFile
,添加动画文件到缓存,plist文件getAnimation
,从缓存中获取动画对象getInstance
,获取动画缓存实例对象通常情况下,对于一个精灵动画,每次创建时都需要加载精灵帧,按顺序添加到数组,再创建对应动作类,这是一个非常烦琐的计算过程。对于使用频率高的动画,比如走路动画,将其加入缓存可以有效降低每次创建的巨大消耗。由于这个类的目的和缓存内容都非常简单直接,所以其接口也是最简单了的,如下所示:
个人觉得http://zengrong.net/post/2006.htm上关于动画的实现也很详细。
标签:style http os 使用 io for 文件 ar div
原文地址:http://www.cnblogs.com/cocos2014/p/3939081.html