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

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

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


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

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  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 plain copy 在CODE上查看代码片 派生到我的代码片
  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 plain copy 在CODE上查看代码片 派生到我的代码片
  1. namespace utils  
  2. {  
  3.     double atof(const char* str);  
  4. }  
          (3) 在.cpp的cocos2dx命名空间内加入以下代码:
[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1.             namespace utils  
  2. {  
  3. #define MAX_ITOA_BUFFER_SIZE 256  
  4.       
  5.     double atof(const char* str)  
  6.     {  
  7.         if (str == nullptr)  
  8.         {  
  9.             return 0.0;  
  10.         }  
  11.           
  12.         char buf[MAX_ITOA_BUFFER_SIZE];  
  13.         strncpy(buf, str, MAX_ITOA_BUFFER_SIZE);  
  14.           
  15.         // strip string, only remain 7 numbers after '.'  
  16.         char* dot = strchr(buf, '.');  
  17.         if (dot != nullptr && dot - buf + 8 <  MAX_ITOA_BUFFER_SIZE)  
  18.         {  
  19.             dot[8] = '\0';  
  20.         }  
  21.           
  22.         return ::atof(buf);  
  23.     }  
  24.       
  25. }  


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 plain copy 在CODE上查看代码片 派生到我的代码片
  1. ArmatureDataManager::getInstance()->addArmatureFileInfo("DemoPlayer.csb");  
  2.   
  3. auto arm = Armature::create("DemoPlayer");  
  4. this->addChild(arm);  
  5. arm->setPosition(Point(300, 300));  
  6. arm->getAnimation()->play("walk");  
  7. // 一般放在onExit或析构中  
  8. ArmatureDataManager::destroyInstance();  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
### 回答1: Cocos2d-x是一个用于游戏开发的开源框架,它提供了用于制作2D游戏的工具和功能。若要利用Cocos2d-x读取传奇wzl文件,需要对wzl文件的格式进行分析,并使用Cocos2d-x提供的读取文件的功能,如果文件为文本格式,可以使用C++的fstream库来读取文件,如果文件为二进制格式,则可以使用C++的fread函数读取文件。 在读取文件的数据后,需要进一步的解析数据并使用Cocos2d-x的绘图功能绘制出游戏界面。 总的来说,要利用Cocos2d-x写一个读取传奇wzl文件的程序,需要对文件格式进行分析,掌握C++的文件读取技巧,以及熟悉Cocos2d-x的游戏开发流程。 ### 回答2: Cocos2d-x是一个开源的跨平台游戏引擎,它支持多种编程语言,包括C++和Lua。要利用Cocos2d-x写一个程序读取传奇wzl文件,我们可以按照以下步骤进行: 1. 首先,需要了解传奇wzl文件的格式和结构。wzl文件是传奇游戏的资源文件,包含了游戏的图像、音乐等资源数据。我们需要分析wzl文件的结构,了解其的数据类型和存储方式。 2. 使用Cocos2d-x提供的文件读取功能,打开并读取wzl文件。可以使用C++的文件操作库或Cocos2d-x的FileUtils类来实现。 3. 解析wzl文件的数据结构。根据对wzl文件的分析,我们可以确定每个资源的存储位置和数据结构。可以使用C++的文件读取功能从wzl文件读取相应的数据段。 4. 对读取的数据进行处理。根据传奇游戏的资源类型,可以使用Cocos2d-x的相关功能将数据转换成可用的资源,例如将图像数据转换成Cocos2d-x的Sprite对象。 5. 显示资源数据。将转换后的游戏资源在屏幕上进行展示。可以使用Cocos2d-x提供的精灵(Sprite)、图层(Layer)等功能将资源显示在游戏界面上。 需要注意的是,读取传奇wzl文件需要对文件解析和数据处理有一定的了解和经验。而Cocos2d-x是一个强大的游戏引擎,提供了丰富的功能和工具来实现游戏的开发。借助Cocos2d-x文件读取和数据处理功能,我们可以更方便地读取传奇wzl文件并使用其的资源数据。 ### 回答3: Cocos2d-x是一个开源的跨平台游戏开发框架,它支持C++和Lua等编程语言,可用于开发各种类型的游戏。如果要利用Cocos2d-x编写一个程序来读取传奇wzl文件,需要进行以下步骤。 首先,我们需要了解传奇wzl文件的格式和结构。通过分析wzl文件的数据结构,可以确定存储在文件的信息,例如角色、物品、地图等。然后,我们可以根据这些信息设计程序的数据结构来存储和管理相关数据。 接下来,在Cocos2d-x创建一个新的项目,然后在项目添加读取wzl文件的必要代码。可以使用C++的文件读取功能来打开wzl文件,并读取的数据。根据wzl文件的格式,解析和提取所需的数据,并将其存储到程序的数据结构。 在读取数据之后,我们可以利用Cocos2d-x的图形渲染和动画功能来展示传奇游戏的角色、物品和地图等信息。使用适当的精灵和纹理资源,将提取的数据呈现在游戏界面上。 此外,为了增强程序的交互性,还可以添加适当的用户输入和操作功能。例如,可以实现点击角色进行移动或攻击的功能,或者通过菜单选项来进行游戏设置和控制等。 最后,进行必要的测试和调试,确保程序能够正确读取和展示传奇wzl文件的内容。如果发现问题,可以根据需要进行修改和优化,直到程序达到预期的效果。 综上所述,借助Cocos2d-x框架,我们可以编写一个程序来读取传奇wzl文件,并展示其的角色、物品和地图等内容。通过处理文件和数据,利用Cocos2d-x框架的图形渲染和动画功能,我们可以创造一个类似传奇游戏的体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值