手机版

cocos2dx骨骼动画甲胄源代码分析(一)

时间:2021-09-08 来源:互联网 编辑:宝哥软件园 浏览:

Cocos2dx从编辑器(cocostudio或flash插件dragonBones)获取xml或json数据,通过调用如下代码可以显示动画效果

armaturedatamanager :3360 getinstance()-addArmatureFileInfoAsync(' armature/dragon . png ',' armature/Dragon.plist ',' armature/Dragon.xml ',this,schedule _ selector(testsynchronousload 3360: data loaded));电枢*电枢=nullptr电枢=电枢: create(' Dragon ');甲胄-getAnimation()-playWithIndex(1);addChild(甲胄);那么调用内部是如何实现的呢?

Armature:create和armature-get animation()-playwithindex实现了什么?这些文章将从源代码分析电枢。

本文是电枢分析的第一部分,将对cocos2dx中的骨骼动画进行整体分析。涉及的内容如下:

什么是骨骼动画

编辑器导出数据格式概述

源代码概述

什么是骨骼动画

游戏中的动画大致可以分为以下三种类型:

帧动画

补间动画

骨骼皮肤动画

帧动画

这是最基础的动画,也是后面两个动画的基础,一帧显示一张图片,cocos2dx Action中的动画就是帧动画。优点是实现简单,缺点是浪费资源(一帧一图可以和下面两个动画对比)。

十二岁

在flash中,有许多补间动画。而不是一帧一图,只需要开始状态和结束状态,中间状态可以根据差值和经过的时间来计算。优点是节约资源,艺人都很熟悉。

骨骼皮肤动画

骨骼动画可以看作是补间动画的延伸,将动画各个部分之间的相关结构(骨骼)制作出来,然后将图形绑定到骨骼上。缺点是程序实现起来比较复杂,与电影相比优点如下(其他优点还没有发现):

1.很少有导出的配置数据和简单的艺术作品

假设有一根骨头的结构如下

身体

左臂

手柄

armRight

向右移动

legLeft

legRight

假设您想要在一帧中将动画向右移动,补间动画需要移动所有的身体、左臂、右腿等。要创建新的帧,而骨骼动画只需要移动身体的位置,它的子节点将跟随父节点。在对应的导出配置中,补间动画要处理body、armLeft等所有子节点的导出数据,而骨骼动画只改变一个节点的数据,导出的数据会小很多。

2.接缝裂缝修复

下图是盗页《游戏引擎架构》 449,意思是画图的时候不注意,可能是连接处有裂痕。这个问题可以通过使用骨骼动画来解决。骨骼动画中的皮肤可以根据重量绑定到多个关节(骨骼),也可以根据重量拉伸。cocostudio骨骼动画编辑器比较陌生,所以不知道能不能多绑定,但是flash的dragonBones插件不行。Spine对这种多重绑定有很好的支持。

编辑器导出数据格式概述

cocostudio导出的json结构类似于dragonbones导出的xml结构,是骨架层、动画层和图片层的三层结构。以龙骨官方演示为例(有删减):

骨架名称=' DragonBones _ Tutorial _ multi behavior ' frame rate=' 24 '版本='2.2 '骨架骨架名称='Dragon' b名称=' tail ' parent=' body ' x=' 45.9 ' y='-70.8 ' kX=' 30 ' kY=' 30 ' cX=' 1 ' cY=' 1 ' Px=' 11.5 ' pY=' 176.35 ' z=' 10 ' d名称='parts-tail' pX='0 '

动画/动画是动画部分,对应flash中的2个区域,用帧标签区分哪个动画,比如站立、行走、跳跃等。

纹理图/纹理图是骨骼部分,对应flash中的3个区域,是皮肤,也就是图形信息。

有了这些信息,flash中的动画效果就可以在程序中还原了,后面的文章中会说dr、drTW、x、kX、kY等等是什么意思。

源代码概述

代码可以大致分为两部分:解析xml或json数据和用解析的数据生成动画。

数据分析相关代码的统一建模语言

简要介绍每个类的功能:

DataReaderHelper:分析数据结构ArmatureData、AnimationData和TextureData这些数据结构可以被armatures、animations和TextureAtlas的数据生成程序直接使用。

ArmatureDataManager:管理DataReaderHelper及其解析的数据。

ArmatureData:对应于xml中的电枢/电枢。

AnimationData:对应于xml中的动画/动画。

TextureData:对应于xml中的subxture/subxture。

BoneData:对应于xml中的。

DisplayData:对应于xml中的d/d。

MovementData:对应于xml中的mov/mov。

MovementBoneData:对应于xml中的mov/mov。

FrameData:对应于xml中的moff/f/mov。

生成动画相关代码的统一建模语言

简要介绍每个类的功能:

Armature:包含骨架信息和动画信息,其中一个可以播放动画。

补间:骨骼动画的补充,一个骨骼和一个补间。与上面对应的flash面板是脚架动画尾部图层的第一至第七帧。

ArmatureAnimation:所有Tween的集合足以制作一个动画。

Bone:有Tween的骨骼信息,从中可以得到某个时间点的骨骼状态。

显示因子:创建显示对象,如皮肤。

每个骨骼中有一个显示管理器:用于管理骨骼上的显示对象。

皮肤:图形的显示对象。

以上内容是我们小编(一)分享的cocos2dx骨骼动画电枢的源代码分析。希望你喜欢。

版权声明:cocos2dx骨骼动画甲胄源代码分析(一)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。