首页 > 其他 > 详细

?CocosBuilder 学习笔记(2) .ccbi 文件结构分析

时间:2019-08-30 13:23:34      阅读:157      评论:0      收藏:0      [点我收藏+]

ccbi总体结构

CCBReader按字节读取.ccbi内容,每个字节8位二进制。

.ccbi总体结构分为4个部分:

技术分享图片

Header

技术分享图片

第0-3字节:ibcc

.ccbi文件的标志。readHeader方法读取这四个字节,如果非ibcc说明非.ccbi文件,返回false停止继续读取。

第4字节:二进制表示的十进制12

版本号。readHeader方法在成功读取ibcc后,会读取该字节。为\f时,如果经过运算后得出5,符合当前版本要求.ccbi文件版本为5,可以继续读取。

第5字节:不为0时说明使用JS Controller,为0则不使用JS Controller

通过是否为0得出bool值,作为 CCBReader _jsControlled 和 _animationManager->_jsControlled。

至此,文件头读取完成,返回true。之后将继续读取后面的内容。

String Cache

执行readHeader方法读取文件头之后,执行readStringCache方法。该方法把项目使用的所有字符串保存在CCBReader成员std::vector<std::string> _stringCache中。

.ccbi文件中StringCache相关的部分,在开始两个字节记录了总的字符串的数量。之后每个字符串用“长度+内容”的形式记录。

技术分享图片

 

可以看出,StringCache用于存储项目中使用到的所有字符串,包括自定义的属性名和string类型的属性值。

1

Animation Sequences

String Cache之后记录的是Animation Sequences。Sequences是animationManager的成员,animationManager是CCBReader的成员。先记录总的seq数量,之后记录其中包含的每个seq。

技术分享图片

每个sequence内部结构:

技术分享图片

值得注意的是,CCB官方文档里介绍的版本为4的.ccbi格式,对于sequence并不包含chainedSequenceId之后的内容,可以推测这些内容是在版本5新增的。

Node Graph

CCBRead通过readNodeGraph(Node * pParent)方法读取Node Graph。

首先从stringcache读取当前类名:

技术分享图片

 然后对当前node获取每个seqId,读取并设置seqProps:

技术分享图片

 

map类型的seqs存储seqId和对应的Map seqNodeProps,seqNodeProps存储seqProp name和对应的seqProp。可以理解成,seqs存储seqId和对应的所有seqProp。

seqs和本node对应,当前node和生成的seqs被加入到animationManager里的map _nodeSequences。

读取并设置每个SequenceProperty:

技术分享图片

刚才是设置node的动画序列,接下来设置node的属性。

CCBRead执行parseProperties(node, pParent, this)方法读取并设置属性。

先获取该node的属性总数,再依次读取并设置各个属性。技术分享图片

读取并设置属性的相关记录:

技术分享图片

当前node的属性设置完成,接下来对子节点递归调用parseProperties方法,解析子节点的相关属性。

?CocosBuilder 学习笔记(2) .ccbi 文件结构分析

原文:https://www.cnblogs.com/deepcho/p/cocosbuilder-ccbi-file-structure.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!