实习小白::(转) Cocos2d-x 3.0开发(十三)使用CocoStudio编辑帧事件并关联到程序

1、概述

帧事件也是新加入的功能。这篇中我们将看到如何使用它。我们将上篇中制作的动画稍加修改。有图为证:

2、用途与原理

首先介绍一下帧事件。正如其名:一个与帧相关联的事件。

为什么要这么做呢?首先没人想做一大堆碎动画,然后一点一点拼着播放吧。另外,有时候流程与事件控制最好关联到帧。比如一个攻击动作,有出刀和收刀两部
分。伤害自然是在刀所触到敌人时候产生的。做成两个动画比较麻烦,程序要管理大量的动画,而且美工也会很郁闷:不但给你们切图,还要给你们切动画。如果用
固定时间来做,也是会有问题。比如机器卡了,帧数就会下降。这个时候,时间就不准确了。用帧事件的方式就会比较好,到了“触刀”那帧,就会有事件,能较好
的处理这种情况。

它的原理是监听。当运行到事件所在的帧时,会触发回调。我们要做的就是在回调函数中操作,判断这一帧是不是我们想要的,标记的方式是Tag字符串。

3、设置帧事件

打开项目,运行动画编辑器,切换到动画模式。

将时间轴拖动到相应帧处,选择一个对象,这里我选择的是左手。然后在它的属性中设置帧事件。

4、创建新工程

运行脚本创建testFrameEvt,编译运行确保原始工程正确。

将CocoStudio导出的资源复制到Resource目录下。

然后配置CocoStudio导出文件的依赖路径和库。可参照:Cocos2d-x 3.0 开发(十一)3.0 alpha1文件结构变化 。

5、载入动画

更改init:

[cpp] view plaincopyprint?

  1. bool HelloWorld::init()
  2. {
  3. //////////////////////////////
  4. // 1. super init first
  5. if ( !Layer::init() )
  6. {
  7. return false;
  8. }
  9. Size visibleSize = Director::getInstance()->getVisibleSize();
  10. Point origin = Director::getInstance()->getVisibleOrigin();
  11. ArmatureDataManager::getInstance()->addArmatureFileInfo("changeShape.ExportJson");
  12. Armature* arm =Armature::create("changeShape");
  13. arm->getAnimation()->play("frameSingle");
  14. arm->getAnimation()->setSpeedScale(0.5);
  15. arm->setPosition(Point(visibleSize.width/2,visibleSize.height/2));
  16. this->addChild(arm);
  17. return true;
  18. }

运行,可见动画播放。

6、监听帧事件

在类中添加一个函数:

[cpp] view plaincopyprint?

  1. void onFrameEvent(Bone *bone, const string& evt, int originFrameIndex, int currentFrameIndex);

并在cpp中实现:

[cpp] view plaincopyprint?

  1. void HelloWorld::onFrameEvent(Bone *bone, const string& evt, int originFrameIndex, int currentFrameIndex)
  2. {
  3. if(strcmp(evt,"110") == 0)
  4. {
  5. ActionInterval *action =  ShatteredTiles3D::create(0.8f, Size(30,30), 5, false);
  6. this->runAction(action);
  7. }
  8. }

可以看出,事件是由一个字符串来标记的。

最后在init中注册:

[cpp] view plaincopyprint?

  1. arm->getAnimation()->setFrameEventCallFunc(this,frameEvent_selector(HelloWorld::onFrameEvent));

帧事件我们用了一个效果来表现,所以还要恢复Grid,这里我们加入一个schedule函数。当然,这里也可以用帧事件来标记恢复点。

[cpp] view plaincopyprint?

  1. //声明
  2. void checkAction(float dt);
  3. //实现
  4. void HelloWorld::checkAction(float dt)
  5. {
  6. if ( this->getNumberOfRunningActions() == 0 && this->getGrid() != nullptr)
  7. this->setGrid(nullptr);
  8. }
  9. //注册
  10. schedule( schedule_selector(HelloWorld::checkAction) );

编译运行,就能看到效果了。

7、总结

通过在cocoStudio中设置Tag的方式来标记帧事件,在程序中设置回调。然后根据tag名来判断是否是需要的帧事件。这里我有两个担心,首先是效
率问题,不知当帧事件多的时候,监听运行起来效率如何。第二是当效率低自动抽帧时,会不会将事件帧抽掉,导致没有事件出现。但愿我的担心是多余的。

Demo 下载:http://download.csdn.net/detail/fansongy/6621423

本篇博客出自阿修罗道,转载请注明出处,不得用于商业用途:http://blog.csdn.net/fansongy/article/details/16991385

时间: 2024-10-06 17:41:50

实习小白::(转) Cocos2d-x 3.0开发(十三)使用CocoStudio编辑帧事件并关联到程序的相关文章

Kinect for Windows SDK v2.0 开发笔记 (十五) 手势帧

 (转载请注明出处) 使用SDK: Kinect for Windows SDK v2.0 public preview1409 同前面,因为SDK未完成,不附上函数/方法/接口的超链接. 这次终于是新的东西了,是"手势帧",不过原名是"可视化手势构建器"(Visual Gesture Builder)帧,是 SDK 2.0自带的手势解决方案,不过,如果您觉得微软写得不可靠,甚至垃圾,您可以尝试自己写个,笔者在 提供的范例中,写了个简单的样子(几十行而已,不要期

实习小白::(转) Cocos2d-x 3.0 开发(十五)使用UILayout布局,制作对话界面

1.概述 上一篇我们在编辑器中设计了一个静态的UIScrollView,而通常我们都需要在程序中动态增加信息.插入元素的位置怎么确定?在3.0中UILayout已经实现了基本的布局,一起来看看吧: 2.编辑界面 打开CocoStudio的UIEditor 编辑一个界面,创建一个ScrollView和两个Button.因为ScrollView继承自UILayout,这里我们采用它.不太能搞定的童鞋可参考:Cocos2d-x 3.0 开发(十四)使用UIScrollView 实现大小不同物品拖动展示

实习小白::(转) Cocos2d-x 3.0 开发(十六)cocos2dx-3.0beta版建立新项目并加载CocoStudio导出文件

1.概述 与alpah版相比,beta版中更改了创建的脚本,可以自定义项目的目录,接下来我们看看.先上图: 2.项目创建 找到 cocos2dx根目录/tools/project-creator/create_project.py文件,双击运行即可.如果未安装python 环境,则需要下载安装.脚本运行起来,会显示一个图形界面,用以设置相应的项目名称.Android包名和文件路径.设置好后,点击下面的create按 钮创建项目,创建成功后会弹出如图所示提示框. 这样我们就成功创建了一个项目,找到

实习小白::(转) Cocos2d-x 3.0 开发(七)在程序中处理cocoStudio导出动画

1.概述 使用cocoStudio可以方便的制作动画,接下来的工作就是在我们的程序中使用制作的动画.这篇中,我将使用程序将两个动画连接起来.有图有真相: 2.制作动画 承接上一篇,我们再制作一个动画.制作动画的方法与之前没有差别,不太熟悉的同学可以看:Cocos2d-x 3.0开发(六)使用cocoStudio创建一个骨骼动画.在“动作列表”中右击,“添加动画”然后编辑就成. 我们新制作的动画的结束点,要与上一篇中制作动画的开始点重合,这样在连接的时候,画面就不会跳动. 制作好后我们将动画导出.

实习小白::(转) Cocos2d-x 3.0 开发(十)使用CocoStudio场景编辑器关联组件

1.概述 我们有了UI交互.有了动画人物.有了物理模拟,还差最后一步——将这些元素融合起来.这就要用到cocoStudio中的场景编辑器了.这次我们要将先前我们做过的所有东西都放到一个场景中去.这项工程比看起来是要简单.上图: 2.创建场景 运行CocoStudio,选择SceneEditor.进入后创建一个新的工程:MyScene. 然后找到先前我们制作的UI部分的导出资源.动画部分的导出资源,将其复制到这个场景工程的Resource文件夹下. 资源准备完成,我们就可以开始制作场景了. 制作比

Yii Framework2.0开发教程(8)输入验证

validate() 方法,在幕后为执行验证操作.先看一个简单的例子,例子的代码在<Yii Framework2.0开发教程(2)使用表单Form>. 类ZhyoulunController中函数actionEntry() ,其中有一句$model->validate(),就是来判断输入的名字和电子邮件是否正确. 修改models/EntryForm.php <?php namespace app\models; use yii\base\Model; class EntryFor

高屋建瓴 cocos2d-x-3.0架构设计 Cocos2d (v.3.0) rendering pipeline roadmap(原文)

Cocos2d (v.3.0) rendering pipeline roadmap Why (the vision) The way currently Cocos2d does rendering is good but it is beginning to feel somehow antiquate and moreover it doesn't actually leverage modern multi core CPUs so popular nowadays on most mo

ASP.NET Core 1.0 开发记录

参考页面: http://www.yuanjiaocheng.net/ASPNET-CORE/first.html http://www.yuanjiaocheng.net/ASPNET-CORE/asp-net-core-overview.html http://www.yuanjiaocheng.net/ASPNET-CORE/asp.net-core-environment.html http://www.yuanjiaocheng.net/ASPNET-CORE/newproject.h

学习时用的软件最新 开发环境为Visual Studio 2010,数据库为SQLServer2005,使用.net 4.0开发。 超市管理系统

一.源码特点 1.采用典型的三层架构进行开发.模板分离,支持生成静态 伪静态..购物车.登陆验证.div+css.js等技术二.功能介绍 1.本源码是一个超市在线购物商城源码,该网上商城是给超市便利店等零售批发实体店定制的网上商城,主要针对周边配送,后台可定义配送范围,可在线支付和货到付款! 2.用户注册,需要填写正确手机号码 获得验证码输入正确才能注册成功,保证用户信息的准确性,真实性.其它在线购物商城的常规功能,该系统都有,非常适合学习或二次开发使用,欢迎下载三.菜单功能       前台页