让cocos2d-x 3.0读取cocostudio中的csb文件

​  现在cocostudio的功能越来越完善,还支持导出二进制的csb文件。可惜现在项目使用的还是3.0版本,不支持csb解析,总不至于为了一个解析功能将整个库升级吧,这也太小题大做了。因为这个csb文件只是将明文的*.ExportJson文件变成二进制的,我猜测只是文件解析略有不同,其他使用都无须改变,所以现在我现在的思路是仅替换文件解析的类。

以一个骨骼动画为例(项目资源和源码在文章下面下载),3.0中加载并播放一个骨骼动画的代码是:

[cpp] view plaincopy
  1. ArmatureDataManager::getInstance()->addArmatureFileInfo("DemoPlayer.ExportJson");
  2. auto arm = Armature::create("DemoPlayer");
  3. this->addChild(arm);
  4. arm->setPosition(Point(300, 300));
  5. arm->getAnimation()->play("walk");
  6. // 一般放在onExit或析构中
  7. ArmatureDataManager::destroyInstance();

可以看出,第一行就是加载ExportJson文件,但如果换成"DemoPlayer.csb"打开出错,为什么呢?前面已经说过,3.0不支持了=。=!!

废话太多了。。。下面是详细步骤:

1 复制源码:跟进addArmatureFileInfo()可以发现CCS资源的解析是由DataReaderHelper类提供的,因此从3.2的cocos/editor-support/cocostudio目录下复制CCDataReaderHelper和CocoLoader源文件(.h和.cpp)共四个文件到3.0的cocos/editor-support/cocostudio目录下替换掉原来文件。

2 然后在工程中将CocoLoader.h和CocoLoader.cpp添加到cocostudio目录中:

3 修改CCDataReaderHelper.cpp中的错误。

(1) 头文件路径不一样,去除"base/"。如#include "base/CCDirector.h"改为#include "CCDirector.h",把下面两个CCScheduler.h和ccUtils.h路径也改了。

(2) 将Vec2类名改称Point,共两处,仔细看报错。(3.2中Point类名又被改成Vec2了,可怜的Point又一次被改名了。。。)

(3) CCDataReaderHelper.cpp还有十几处Use of undeclared identifier 'utils'错误,这是因为3.0扩展了ccUtils.h,增加了几个新功能,修改方法见第4条。

4 跟进ccUtils.h中,也可以直接在cocos/2d/support目录下找到。

(1) 在.h中加入以下头文件:

[cpp] view plaincopy
  1. #include <vector>
  2. #include <string>
  3. <span style="color:#FF0000;"><strong>   </strong></span>#include "2d/CCNode.h"
  4. <span style="color:#FF0000;"><strong>   </strong></span>#include "ccMacros.h"

(2) 在.h的cocos2dx命名空间内加入以下代码:

[cpp] view plaincopy
  1. namespace utils
  2. {
  3. double atof(const char* str);
  4. }

(3) 在.cpp的cocos2dx命名空间内加入以下代码:

[cpp] view plaincopy
  1. namespace utils
  2. {
  3. #define MAX_ITOA_BUFFER_SIZE 256
  4. double atof(const char* str)
  5. {
  6. if (str == nullptr)
  7. {
  8. return 0.0;
  9. }
  10. char buf[MAX_ITOA_BUFFER_SIZE];
  11. strncpy(buf, str, MAX_ITOA_BUFFER_SIZE);
  12. // strip string, only remain 7 numbers after '.'
  13. char* dot = strchr(buf, '.');
  14. if (dot != nullptr && dot - buf + 8 <  MAX_ITOA_BUFFER_SIZE)
  15. {
  16. dot[8] = '\0';
  17. }
  18. return ::atof(buf);
  19. }
  20. }

5 至此就大功告成了,但是如果仍报CocoLoader与CCDataReaderHelper的链接错误,那么需要手动在"cocos2dx IOS"的"Build Phases"上手动添加CocoLoader的.h和.cpp文件。下面给出添加步骤:

(1) 选择项目目录下的"cocos2d_libs.xcodeproj",在右边"build all libs iOS"下面的"cocos2dx iOS"库(如果要在Mac上运行,则选择"build all libs Mac"下面的"cocos2dx iOS"库),再选中右边的"Build Phases"。如下图:

(2) 点开"Compile Headers",再点击"+"号,添加CocoLoader.h进去,此时h文件应该是(356 items)

(3) 点开"Compile Sources",再点击"+"号,添加CocoLoader.cpp进去,此时cpp文件应该是(301 items)

现在应该可以编译并运行csb文件了,将DemoPlayer.ExportJson改成DemoPlayer.csb运行了看看吧!

[cpp] view plaincopy
  1. ArmatureDataManager::getInstance()->addArmatureFileInfo("DemoPlayer.csb");
  2. auto arm = Armature::create("DemoPlayer");
  3. this->addChild(arm);
  4. arm->setPosition(Point(300, 300));
  5. arm->getAnimation()->play("walk");
  6. // 一般放在onExit或析构中
  7. ArmatureDataManager::destroyInstance();

转载于:https://www.cnblogs.com/Anzhongliu/p/6091954.html

让cocos2d-x 3.0读取cocostudio中的csb文件相关推荐

  1. ajax 文件数据流,Ajax如何读取数据流中的xml文件?

    Ajax如何读取数据流中的xml文件? 这是我的源代码,请大家帮忙看看,我读到的怎么都是空值.是不是方法错了? var xmlHttp; function createXMLHttpRequest() ...

  2. java读取csv文件_使用扫描仪读取Java中的CSV文件

    java读取csv文件 We can use Java Scanner Class to read CSV File in java. 我们可以使用Java扫描程序类在Java中读取CSV文件. 读取 ...

  3. android读取工程目录下的文件,Android编程实现读取工程中的txt文件功能

    本文实例讲述了Android编程实现读取工程中的txt文件功能.分享给大家供大家参考,具体如下: 1. 众所周知,Android的res文件夹是用来存储资源的,可以在res文件夹下建立一个raw文件夹 ...

  4. eclipse mysql Xml配置_mysql8.0在eclipse中通过xml文件配置数据库连接池

    mysql8.0在eclipse中通过xml文件配置数据库连接池 1.关于Mysql8.0 2.数据库连接池(DBCP) 3.准备工作 4.配置context.xml 5.配置web.xml 6.调用 ...

  5. java读取系统中指定的文件_java读取jar中指定的文件

    Java 档案 (Java Archive, JAR) 文件是基于 Java 技术的打包方案.它们允许开发人员把所有相关的内容 (.class.图片.声音和支持文件等) 打包到一个单一的文件中.JAR ...

  6. java内存中读文件_关于内存管理:读取Java中的大文件

    我需要一个非常了解Java和内存问题的人的建议. 我有一个大文件(大约1.5GB),我需要将此文件切成许多小文件(例如100个小文件). 我通常知道如何做到这一点(使用BufferedReader), ...

  7. c++读取txt文件中的数字_在Python中读取包中的数据文件的三种方式

    我们知道,写Python代码的时候,如果一个包(package)里面的一个模块要导入另一个模块,那么我们可以使用相对导入: 假设当前代码结构如下图所示: 其中test_1是一个包,在util.py里面 ...

  8. SpringBoot 读取项目中静态资源文件

    目录 一. ClassPathResource 二. DefaultResourceLoader 三. PathMatchingResourcePatternResolver 四. ResourceU ...

  9. android读取assets中的html文件,android读取assets文件.htm

    android读取assets文件 android读取assets文件 style='FONT-SIZE: 14px; FONT-FAMILY: verdana, "ms song" ...

  10. 在android studio中如何读取asserts中图片、文件

    写一点自己在写代码中遇到的一点点小问题,有可能很简单,新手上路,我很菜,但是我很努力. 我们老大要我们在项目中加配置文件,还必须是放在asserts目录下.由于我们这个项目是在android stud ...

最新文章

  1. 【STM32】STM32f4学习之路--时钟
  2. Objective-C设计模式(MVC)的实现,以及协议与委托的运用
  3. swagger api文档_带有Swagger的Spring Rest API –公开文档
  4. webmagic抓取实例
  5. 怎么通过id渲染页面_完全理解Vue的渲染watcher、computed和user watcher
  6. button点击后变色_汽车改色膜新潮流,2021年流行渐变色
  7. ImageNet2012数据集完整版百度云下载
  8. 群辉发布RackStation系列机型——RS3621RPxs、RS3621xs+与RS4021xs+
  9. 阿里云河源数据中心正式开服 疫情期间曾2小时扩容1万台云服务器
  10. Linux中配置pacman镜像源(manjaro)
  11. centos网卡错误Device eth0 does not seem to be present
  12. 算法实例(2)_遗传算法
  13. 1600k 打印头测试软件,巧修 LQ-1600K打印头.doc
  14. u盘启动怎么修复计算机,电脑进不了系统怎么办?u启动u盘启动盘重建主引导记录mbr...
  15. access查询设计sol视图_选择查询-在access中如何建立一个选择查询只查询一个信?在access 爱问知识人...
  16. 信任=自信+他信+信他
  17. python——利用正则表达式爬取豆瓣读书中的图书信息
  18. 主动形状模型(ASM)和主动外观模型(AAM)资源汇总
  19. mysql sum提高效率_MySQL巧建sum索引帮我们提高至少100%的效率
  20. 用Springboot写饼状图

热门文章

  1. Python3编写炸金花游戏--超详细的讲解!!
  2. 楼市泡沫雪崩为何十倍“猛于”A股大跌
  3. 中国石油大学(华东)计算机/软件考研经验分享
  4. 吴恩达:还没有人能完全理解人工智能,包括谷歌和百度
  5. 无刷有感电机测速、速度闭环控制
  6. java编写投票功能需求分析
  7. MT6577供放问题
  8. 使命召唤手游显示服务器停服,使命召唤手游停服了吗 是手游还是端游
  9. hive之内表和外表
  10. MySQL 中的定时任务