1、概述
帧事件也是新加入的功能。这篇中我们将看到如何使用它。我们将上篇中制作的动画稍加修改。有图为证:
2、用途与原理
首先介绍一下帧事件。正如其名:一个与帧相关联的事件。
为什么要这么做呢?首先没人想做一大堆碎动画,然后一点一点拼着播放吧。另外,有时候流程与事件控制最好关联到帧。比如一个攻击动作,有出刀和收刀两部分。伤害自然是在刀所触到敌人时候产生的。做成两个动画比较麻烦,程序要管理大量的动画,而且美工也会很郁闷:不但给你们切图,还要给你们切动画。如果用固定时间来做,也是会有问题。比如机器卡了,帧数就会下降。这个时候,时间就不准确了。用帧事件的方式就会比较好,到了“触刀”那帧,就会有事件,能较好的处理这种情况。
它的原理是监听。当运行到事件所在的帧时,会触发回调。我们要做的就是在回调函数中操作,判断这一帧是不是我们想要的,标记的方式是Tag字符串。
3、设置帧事件
打开项目,运行动画编辑器,切换到动画模式。
将时间轴拖动到相应帧处,选择一个对象,这里我选择的是左手。然后在它的属性中设置帧事件。
4、创建新工程
运行脚本创建testFrameEvt,编译运行确保原始工程正确。
将CocoStudio导出的资源复制到Resource目录下。
然后配置CocoStudio导出文件的依赖路径和库。可参照:Cocos2d-x 3.0 开发(十一)3.0 alpha1文件结构变化。
5、载入动画
更改init:
- @H_502_162@boolHelloWorld::init()
- @H_502_162@{
- @H_502_162@//////////////////////////////
- @H_502_162@//1.superinitfirst
- @H_502_162@if(!Layer::init())
- returnfalse;
- @H_502_162@}
- @H_502_162@
- @H_502_162@SizevisibleSize=Director::getInstance()->getVisibleSize();
- @H_502_162@Pointorigin=Director::getInstance()->getVisibleOrigin();
- @H_502_162@
- @H_502_162@ArmatureDataManager::getInstance()->addArmatureFileInfo("changeShape.ExportJson");
- @H_502_162@Armature*arm=Armature::create("changeShape");
- @H_502_162@arm->getAnimation()->play("frameSingle");
- @H_502_162@arm->getAnimation()->setSpeedScale(0.5);
- @H_502_162@arm->setPosition(Point(visibleSize.width/2,visibleSize.height/2));
- this->addChild(arm);
- @H_502_162@true;
- @H_502_162@}
运行,可见动画播放。
6、监听帧事件