九,骨骼动画

1.骨骼动画vs Sprite sheets

你能使用sprite sheets 创建动画,它很快又容易。直到你意识到你的游戏需要大量的动画并且内存消耗越来越高,并且需要时间载入全部数据。为了限制大小,你需要为动画限制到比较低的FPS,然后动画看起来不会如你所期望的那么平滑。这时你就需要骨骼动画了。

2.骨骼动画简介

骨骼动画在cocos2d-x动画是一个技术,一个角色由两部分组成:一个显示的表皮和类似人骨头样的网格。

Cocos2d-x提供了一种方式来在你的应用程序中使用2 D骨骼动画。骨骼动画设置的过程可能有些复杂,但使用起来很容易,当然有一些工具能简化这个过程。当使用骨骼动画时,动画是由几个骨头批次连接组成。影响一个骨头也会影响它下面的所有子元素。通过在每个骨头不同的组合转换,你可以获得不同姿势的骨架。

如果对于一个时间点的每个骨骼使用某个转换定义关键帧,你能插入关键帧来让骨骼动画更为平滑。附加代码中,我使用一个类,名叫Transformation,它包含2D转换数据,如平移,旋转,缩放。然后一个关键帧通过一个帧数被定义成一个这样的转换。一个关键帧定义了一个KeyframeAnimation的集合。最后一个SkeletonAnimation是一个KeyframeAnimations集合,一个用于每个骨骼。另外,你使用一个骨骼,保持关节的列表定义骨骼的层次结构。不同于sprite sheets每个骨头分配特定的纹理,如下图所示:

3.骨骼动画的工具

据我们所知,CocosBuilder 是一个很好的免费的创建骨骼动画的工具。CocosBuilder于Javascript绑定构建Cocos2d,这意味着你的代码,动画,接口将会在cocos2d-x中无修改运行。

4.使用cocosbuilder动画

你能使用CocosBuilder来创建角色动画
,场景动画或任何你能想象到的动画。动画编辑器已经完全支持多个解决方案,关键帧,骨骼动画和多个时间线等。在主窗口的底部你可以找到时间轴。你使用时间线来创建你的动画。

默认情况下你的ccb-file文件有一个单独的10秒长度的时间线。CocosBuilder编辑动画在每秒30帧的帧率下,当你在cocos2d中你的应用在播放动画时,却是60帧/每秒(默认)。当前时间显示在右上角,格式为分钟:秒钟:帧。蓝色的垂直线显示当前时间。点击time显示改变当前时间线的间隔。

5.添加关键帧

在CocosBuilder中动画是基于关键帧的。你能添加关键帧到不同属性的一个节点中并且CocosBuilder会自动插入到关键帧之间,任意不同类型的容位中。为了添加一个关键帧,首先通过点击名字右边的三角形来展开视图节点。它会展示所有的节点动画属性。取决于你选择的节点类型,动画会有略微不同。一旦属性可见,那么你能点击时间线中用可选的属性。在点击的时候这会创建一个新的关键帧。或者,你可以通过选择一个节点创建一个新的关键帧,然后选择插入关键帧动画菜单。如果你在画布局域转换一个节点,关键帧会自动添加到当前时刻,考虑到转换后的属性在时间轴上已经有一个或多个关键帧。

6.编辑关键帧

你编辑一个特定节点的关键帧通过移动时间标记到关键帧的时刻并选择这个节点。通过双击它你能集中一个关键帧。通过拖动它们周围的选择框,你能选择关键帧并且一起移动它们。你也可以在节点之间复制和粘贴关键帧。在粘贴关键帧时确保你仅有一个已选择的关键帧。这个关键帧将会粘贴到时间标记是起始位置。如果你选择一组关键帧,那么通过选择反向选择关键帧动画菜单可以扭转他们的顺序。使用拉伸选择关键帧选项来加快或减慢一个动画的一个比例系数。

7.导入一个图像序列

如果你有一个通过sprite创建出来的帧动画,它被乏味到移动到时间线每一个帧中。CocosBuilder简化了这个过程通过自动导入一个图像序列。在工程视图的左手边选择你想要导入的关键帧,然后在时间线上选择一个CCSprite。现在在动画菜单中选择Create Frames from
Selected Resources。这关键帧将会自动被创建在标记的起始位置。如果你需要让动画慢下来,选择新创建的关键帧并使用Stretch Selected Keyframes命令

8.使用 Easing

CocosBuilder提供一个可选的cocos2d提供的easings子集。在2个关键帧中右键并选择你想要应用的easing。

一些easings有额外的选项,在easing之后你能再次点击右键运用

9.使用多个时间线

CocosBuilder的动画编辑器一个非常强大的特性就是在一个单一的文件中可以有多个时间线。你能为不同的序列命名并使用它们的名字在代码中播放它们。在不同的时间线中它们也能平滑的转换。

使用时间线弹出菜单,选择,添加,编辑你的时间线。

在编辑时间线的对话框中你能获得你时间线的概述并重命名它们,添加新的一个并设置一个时间线当ccbi-file装入你的应用程序直接自动开始播放。

在时间线中没有关键帧设置可以跨时间线来共享它们的属性值。例如,如果你在一个时间线中移动一个节点,只要它们没有一个关键帧设置position属性,它将被移到所有时间线中。有时添加一个单一的关键帧到一个属性中,为一个特定的时间线,覆盖了共享值是很有用的。

10.链接时间线

你可以自动播放时间序列通过链接它们。你还可以使用这个特性来自动循环的时间表。

在有时间线的播放序列中,点击No chained timeline文本并选择你想要播放当前帧之后的时间线。

11.在代码中播放动画

以编程方式控制你通过CocosBuilder创建的动画,你就需要找到CCBAnimationManager。当ccbi-file被载入时,动画manager将分配到节点userObject。

CCNode *myNodeGraph = ccbReader->readNodeGraphFromFile("myFile.ccbi", this);

动作管理器将返回一个autoreleased对象。播放一个特定的时间线调用runAnimationsForSequenceNamed方法。如果一个时间线是当前正在被播放,当调用这个方法时,它将立即停止。

animationManager->runAnimationsForSequenceNamed("My Timeline");

还有一种可选的情况,你能使用一个在间隔时间期间到平滑转换的新时间线。在可能的情况下线性加速器将被用于转换。

animationManager->runAnimationsForSequenceNamedTweenDuration("My Timeline",0.5f);

也可以检索一个回调,每当一个时间线完成播放时。在序列中你将接收这些回调,即使另一个时间线被链接了。使用CCBAnimationManagerDelegate来接收这些回调。

cocos2d-x开发记录:二,基本概念(骨骼动画)的更多相关文章

  1. Qt移动应用开发(二):使用动画框架

    Qt移动应用开发(二):使用动画框架 上一篇博客介绍了怎样使用Qt的QML来对屏幕分辨率大小进行适应,其实,不同分辨率的适应是一个很棘手的问题,除了分辨率不同外,宽高比(aspect ratio)也不 ...

  2. OpenHarmony标准设备应用开发(二)——布局、动画与音乐

    (以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 邢碌 上一章我们讲解了应用编译环境准备,设备编译环境准备,开发板烧录,将一个最简单的 OpenAtom OpenHar ...

  3. cocos2d-js 骨骼动画 3.10

    近期使用了cocos动画中的骨骼动画,这里记录使用的两种方式(3.10版): 一.cocos自带的动画编辑器导出的动画 ccs.armatureDataManager.addArmatureFileI ...

  4. cocos creator 动画编辑器以及骨骼动画的使用

    一.普通动画的设置 1.添加动画组件 a.添加空节点=>添加动画组件 b.新建Clip文件=>打开编辑模式添加动画编辑(并且把添加的clip文件拖动到右边面板的Default Clip 与 ...

  5. Cocos2d-js 开发记录:骨骼动画载入

    不得不说cocos2d-js的文档实在是少,骨骼动画的载入和C++版本的好像还有些不同不能直接依样画葫芦. 一个由cocos studio编辑生成的骨骼动画一般会包含如下几个文件: .ExportJs ...

  6. Dokuwiki 二次开发记录

    Dokuwiki 二次开发记录 [转]http://www.syyong.com/other/Dokuwiki-Secondary-Development-Record.html DokuWiki 是 ...

  7. SQL开发技巧(二)

    本系列文章旨在收集在开发过程中遇到的一些常用的SQL语句,然后整理归档,本系列文章基于SQLServer系列,且版本为SQLServer2005及以上-- 文章系列目录 SQL开发技巧(一) SQL开 ...

  8. Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  9. MS CRM 2011的自定义和开发(11)——插件(plugin)开发(二)

    http://www.cnblogs.com/StoneGarden/archive/2012/02/06/2339490.html MS CRM 2011的自定义和开发(11)——插件(plugin ...

随机推荐

  1. ubuntu 软件包管理工具 dpkg,apt-get,aptitude 区别

    ubuntu 软件包管理工具 dpkg,apt-get,aptitude 区别 一:dpkg dpkg 是一种比较低层的软件包安装管理工具,在安装时,不会安装软件包的依赖关系:只能安装所要求的软件包: ...

  2. LightOj 1123-Trail Maintenance(最小生成树:神级删边)

    1123 - Trail Maintenance PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB ...

  3. idea 免费激活(破解)

      1.将补丁(JetbrainsCrack-2.7-release-str.jar)拷贝到idea的安装目录/bin下 下载破解补丁 从IntelliJ IDEA 注册码网站:http://idea ...

  4. SettingsNotePad++

      迁移时间:2017年5月20日11:04:46Author:Marydon官网下载 http://notepad-plus.en.softonic.com/1.修改字体大小及背景色 设置--> ...

  5. Timus 1149. Sinus Dances 打印复杂公式

    就是打印以下这两个复杂的式子: Let An = sin(1–sin(2+sin(3–sin(4+-sin(n))-) Let Sn = (-(A1+n)A2+n–1)A3+-+2)An+1 For ...

  6. MySQL Desc指令相关

    MySQL Desc指令相关   2011-08-09 11:25:50|  分类: my基本命令 |举报 |字号 订阅 1.desc tablename; 例如 :mysql> desc jo ...

  7. python 版websocket实现

    ubuntu下python2.76 windows python 2.79, chrome37 firefox35通过 代码是在别人(cddn有人提问)基础上改的, 主要改动了parsedata和se ...

  8. 【mysql+RBAC】RBAC权限处理(转载:http://www.cnblogs.com/xiaoxi/p/5889486.html 平凡希)

    1.这里我只讲核心,mysql查询语句:FIND_IN_SET(str,strlist) 2.具体教程可以参考[童攀老师的RBAC],很清晰,赞一个. 3.详解:mysql的find_in_set 首 ...

  9. Python学习笔记010——形参与实参

    在使用中忽略了一个问题,形参有些和实参类似,也不能是“关键字后面含有位置参数”,即“默认形参”后面必须不能含有“位置”形参! def test(a=100,b): print("test&q ...

  10. Unix环境高级编程(七)fork函数总结

    在Unix/Linux中用fork函数创建一个新的进程.进程是由当前已有进程调用fork函数创建,分叉的进程叫子进程,创建者叫父进程.该函数的特点是调用一次,返回两次,一次是在父进程,一次是在子进程. ...