转载请注明出处
用过的人都知道,cocos2d的动画编辑器是多么的坑,自从cocos2d支持Animation后,开始使用Animation动画了。关于Animation的使用网上也有很多,但是我看了一下,主流的就是两种方法,一是:手动添加,将plist文件里的精灵帧一个一个顺序读到Animation类中,然后调用Animate类创建动画;二是:文件添加,将plist文件添加到AnimationCache中,然后调用Animate创建动画。具体实现的方法官网的文档都有,(官网文档链接http://www.cocos.com/docs/native/v3/frame-animation/zh.html)这里我简答贴一下第二种实现方式:
auto cache = AnimationCache::getInstance();
cache->addAnimationsWithFile("animations/animations-2.plist");
auto animation2 = cache->getAnimation("dance_1");
auto action2 = Animate::create(animation2);
_tamara->runAction(Sequence::create(action2, action2->reverse(), NULL));
代码比较简单,这里不做过多解释。有另外一个问题需要注意,就是方法一和方法二加载的plist是不同的plist文件!
plist文件的分类参见以下文章:http://zengrong.net/post/1981.htm 和 http://zengrong.net/post/2006.htm
关于带有动画序列帧的plist文件的创建,个人觉得从TexturePacker中是无法导出的,TexturePacker中导出的plist文件都是图像纹理
文件,带有
动画序列帧的plist文件我目前还没有找到比较好的创建方式,在这里就介绍一下手动创建动画序列帧plist文件的方法吧。
准备文件:animationTest.plist(图像纹理plist文件),animationTest.png(这是我准备的素材,大家可以换成自己的)
官方其实就有带有动画序列帧的plist文件,在tests\cpp-tests\Resources\animations文件夹下的animation-2.plist就是的。
用文本编辑器(推荐notepad++)打开animation-2.plist,看完上面的文章,文件格式还是很好懂的,这里我也不多说了,直接说哪里需要
修改吧。
首先,dance_1是动画名称,可以根据自己命名的习惯给自己的动画命名,然后是延迟播放和循环什么的根据需要设置一下,接着把
grossini_dance_01.png,grossini_dance_02.png等图片名换成自己的图片,自己的这个图片必须要是打包出来的,比如这里我的图片
打包成animationTest.png,animation.png下包含了01.png,02.png,03.png,等等,需要几帧就放几帧,注意最后一帧需要添加
notification lastframe
信息,表示这是最后一帧。
再然后需要注意的地方就是在结尾引用的地方,
grossini.plist grossini_blue.plist grossini_family.plist
array里面放上面引用的图片的plist,比如我之前用的是animationTest.png,那么我在这里放入animationTest.plist就可以了。
保存,在代码中文件载入就可以播放了。
这种方法最明显的缺点就是不够直观,制作动画也比较麻烦,大工程肯定不行,不过开发一个这样的plist生成器应该不难,以后有时间的话,
我可以考虑做一个生成器(不过估计没时间做,哈哈哈,就算要做,也应该是项目特别需要了吧)不过对于学习和个人开发使用的一些比较
简单的动画还是可以用的。如果大家有什么更好的方法,欢迎提出来。