CocosBuilder 学习笔记(2) .ccbi 文件结构分析
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 文件结构分析的更多相关文章
- java之jvm学习笔记三(Class文件检验器)
java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...
- Windows phone 8 学习笔记(2) 数据文件操作
原文:Windows phone 8 学习笔记(2) 数据文件操作 Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方 ...
- thinkphp学习笔记2—入口文件
原文:thinkphp学习笔记2-入口文件 在thinkphp中有两个入口文件,一个是项目的入口文件,是index.php在主目录里面,还有一个是thinkphp框架的的入口文件,放在框架目录下面如: ...
- matlab学习笔记5--低级文件输入输出函数
一起来学matlab-matlab学习笔记5 低级文件输入输出函数 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等著 感谢张 ...
- CocosBuilder 学习笔记(3) AnimationManager 与 ccbi 文件解析
[CocosBuilder]学习笔记目录 1. 相关的类 先介绍和AnimationManager相关的几个类: CCBSequence 时间线.有成员duration(时间线时间,默认10秒).na ...
- CocosBuilder 学习笔记(1) CCBReader 解析.ccbi文件流程
1. 简介 CocosBuilder是免费开源的Cocos2d UI编辑器. .ccb文件是CCB项目的原始文件. .ccbi文件是CCB项目发布后的生成的二进制文件.CCBReader可以快速通过该 ...
- [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Windows phone 8 学习笔记(2) 数据文件操作(转)
Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方.本节主要讲解它们的用法以及相关限制性.另外包括本地数据库的使用方式 ...
- Python学习笔记之从文件中读取数据
10-1 Python 学习笔记:在文本编辑器中新建一个文件,写几句话来总结一下你至此学到的Python 知识,其中每一行都以“In Python you can”打头.将这个文件命名为learnin ...
随机推荐
- PHP中的$_GET变量
定义 在 PHP 中,预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值. $_GET 变量 预定义的 $_GET 变量用于收集来自 method=&q ...
- 第二篇:"空空如也"的博客应用
文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 建立博客应用 我们已经建立了 django 博客的项目工程,并且成功地运行了它.不过到目前为止这一切都还只是 django 为 ...
- 15款好用超赞的chrome插件, 开发者们的必备~
今天推荐一波Chrome插件干货.这些插件带给我开发效率上的提升.所以在这里整理一下,分享给朋友们. 作为一名程序开发者,推荐一波常用的chrome插件,用了就舍不得丢,包括免费FQ工具,github ...
- 100天搞定机器学习|Day9-12 支持向量机
机器学习100天|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机器学习|D ...
- DBeaver之连接hive初体验
工作中第一次和搞大数据的同事配合,他让我用hue看hive数据,,由于本人英语菜逼,hue全英文的页面看不习惯,遂找了一个DBeaver工具,我也是第一次使用这个工具,好像挺可以的,可以连mysql, ...
- css3系列之详解perspective
perspective 简单来说,就是设置这个属性后,那么,就可以模拟出像我们人看电脑上的显示的元素一样.比如说, perspective:800px 意思就是,我在离屏幕800px 的地方观看这 ...
- 【原创】HashMap复习精讲
引言 由于近期忙着搬家,又偷懒了几个礼拜! 其实我很早以前就想写一篇关于HashMap的面试专题.对于JAVA求职者来说,HashMap可谓是集合类的重中之重,甚至你在复习的时候,其他集合类都不用看, ...
- php 获取未来七天的日期和星期
php获取未来七天的日期和星期代码 for($i=4;$i<8;$i++){ $dateArray[$i]=date('Y-m-d',strtotime(date('Y-m- ...
- 通过Powershell修改文件默认打开方式
修改原理 详情: Windows下通过注册表修改某个类型文件的默认打开方式和文件图标 脚本详情: Github:Change_default_programs.ps1 描述: 至少在Windows10 ...
- 【算法】【排序】【插入类】希尔排序 ShellSort
#include<stdio.h> #include <time.h> #include<stdlib.h> int main(){ ]; //设立随机数 sran ...