• ‎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类型的属性值。

    Animation Sequences

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

    每个sequence内部结构:

    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的属性。

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

    先获取该node的属性总数,再依次读取并设置各个属性。

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

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

  • 相关阅读:
    vue 环境的搭建及初始化项目
    vue axios 发送post请求,后端接收参数为null
    iOS-WKWebView的使用
    iOS开发GCD(3)-数据安全
    iOS开发-本地存储(偏好设置,Plist,归档)
    ios开发GCD(2)-dispatch_semaphore_t信号量计数器
    ios开发多线程之NSThread
    Runtime消息动态解析与转发流程
    iOS动画-从UIView到Core Animation
    贝塞尔曲线UIBezierPath简单使用
  • 原文地址:https://www.cnblogs.com/deepcho/p/cocosbuilder-ccbi-file-structure.html
Copyright © 2020-2023  润新知