Cocos2D-X-3.4项目直升Cocos2D-X-3.6需要解决的问题

栏目: IOS · 发布时间: 6年前

内容简介:在Ubuntu上安装Cocos2d-x 3.4环境失败后,毅然决定投入3.6的怀抱,因为我在Ubuntu上已经成功安装好了3.6的开发环境。现在要确认的是,以前用CocosStudio 1.6(够老的吧?不过现在貌似有些公司还在用啊)做的UI工程和特效在3.6下是否会出问题,出的问题是否能顺利解决。这决定了我是否能在3.6的环境下开发。准备用以前一个3.4版本下开发的单机游戏做测试。选这个项目的原因是:1. 项目比较小,逻辑简单,不容易出问题。 2. 项目代码100%本人独立完成,即使出问题,容易查找。

前言

在Ubuntu上安装Cocos2d-x 3.4环境失败后,毅然决定投入3.6的怀抱,因为我在Ubuntu上已经成功安装好了3.6的开发环境。

现在要确认的是,以前用CocosStudio 1.6(够老的吧?不过现在貌似有些公司还在用啊)做的UI工程和特效在3.6下是否会出问题,出的问题是否能顺利解决。这决定了我是否能在3.6的环境下开发。

准备用以前一个3.4版本下开发的单机游戏做测试。选这个项目的原因是:1. 项目比较小,逻辑简单,不容易出问题。 2. 项目代码100%本人独立完成,即使出问题,容易查找。

先将项目备份一下,改一个新的目录名,然后开始在里面折腾。

配置环境

回到Windows机器上,把运行环境先降级到Cocos 2d-x 3.6。方法就是进入解压后的cocos2d-x-3.6目录下,运行:

python setup.py

然后重启一次电脑,生产环境就变成Cocos2d-x 3.6了。

用cocos new的命令创建一个新工程。我们只需要工程目录下的cocos2d-x目录。(其实就是完整的cocos2d-x-3.6目录下的内容,去除掉template和test这两个目录)。将原3.4工程目录下的cocos2d-x目录整个删除,将新工程的这个目录完整拷贝过去。

读取不到资源的坑

然后打开Vs2013开始调试,发现找不到资源文件,读不到Resorces目录下的内容。

跟踪比较3.4和3.6两个项目下的区别。发现在FileUilt类下的_defaultRootPath,一个是Rersouce目录,一个是proj.win32/Debug.win32目录。

那么3.6是如何找到资源的呢?再跟踪3.6的空项目,发现它就是在proj.win32/Debug.win32目录下读取的文件。

这说明了一个问题:3.6版本在编译的时候把资源拷贝到了这个目录下。

打开proj.win32下的C++项目配置文件,后缀是.vcxproj那个,比较3.4和3.6下这个文件的区别,发现原来3.4项目少了后面一个xcopy资源的操作。下面是添加后的内容:

<PreLinkEvent>
    <Command>
    if not exist "$(OutDir)" mkdir "$(OutDir)"
    xcopy /Y /Q "$(EngineRoot)external\websockets\prebuilt\win32\*.*" "$(OutDir)"
    xcopy "$(ProjectDir)..\Resources" "$(OutDir)" /D /E /I /F /Y
    </Command>
</PreLinkEvent>

添加的是这行: xcopy "$(ProjectDir)..\Resources" "$(OutDir)" /D /E /I /F /Y

这样读取资源的坑就解决了。

回头想一想,其实这不是Cocos的坑啊,人家已经在工程文件中拷贝了资源。好吧,是我自己挖的坑,但是只要是直接升级,而不是开新项目,难免就会碰到这个问题。反正我是被折腾了一两个小时。

CocosStudio中粒子特效的坑

这个坑由来已久了,当年发现之后就跟cocosStudio的作者沟通过,他给出的建议是粒子特效中用到的png和plist不要同名即可。这样的规范下,在Debug版本运行的时候,虽然会不断报找不到文件的错,但并不影响运行,程序也不会崩。至少在3.4以及3.4以下的版本下一直是可行的。

但是,3.6下崩了。

这个Bug,貌似CocosStudio退出江湖的时候都没有解决,还是让我们自己动手吧。

Cocos2D-X-3.4项目直升Cocos2D-X-3.6需要解决的问题

找到CCDataReaderHelper.cpp这个文件,打开。

F3找到下面这个函数。

void DataReaderHelper::addDataFromBinaryCache(const char fileContent, DataInfo dataInfo)

然后找到这个函数最后的位置:

Cocos2D-X-3.4项目直升Cocos2D-X-3.6需要解决的问题

红框的部分,修改为:

if (FileUtils::getInstance()->isFileExist(pngPath)) {
    ArmatureDataManager::getInstance()->addSpriteFrameFromFile((dataInfo->baseFilePath + plistPath).c_str(), (dataInfo->baseFilePath + pngPath).c_str(), dataInfo->filename.c_str());
}

就是加个判断条件,如果有plist,但是没有同名的png,就不加入到SpriteFrame中。

看到这里,你应该明白这个坑爹的坑是怎么来的了吧:cocosStudio在读粒子特效的plist时,把它当成了png + plist的图集了。

这个坑也就填平了。再次运行项目,一切正常,打完收工。

最后的说明

我们的项目一直是用的csb二进制文件,没有去读json,所以json我就不管了。如果你的项目读的是json文件,你需要修改 DataReaderHelper::addDataFromJsonCache 这个类里面的相同内容。

或者,用json的很简单,因为你可以修改文本啊,打开特效/UI对应的JSON文件,将加在最后那个粒子特效plist那行删除掉就行了。

--------------------------------------分割线 --------------------------------------

Ubuntu 下配置/编译/运行 Cocos2dx项目 http://www.linuxidc.com/Linux/2015-07/120723.htm

新里程碑:Cocos2d-x v3.0 正式版本发布! http://www.linuxidc.com/Linux/2014-04/100858.htm

Cocos2d基础及基本函数 http://www.linuxidc.com/Linux/2014-02/97382.htm

Cocos2d 如何做Android 适配 http://www.linuxidc.com/Linux/2013-05/84616.htm

剖析Cocos2d-x之Action实现 http://www.linuxidc.com/Linux/2013-04/82436.htm

Ubuntu下Cocos2d-x开发环境搭建及配置 http://www.linuxidc.com/Linux/2013-03/81876.htm

--------------------------------------分割线 --------------------------------------

Cocos2D-X 的详细介绍 请点这里

Cocos2D-X 的下载地址 请点这里

本文永久更新链接地址 http://www.linuxidc.com/Linux/2017-06/145288.htm


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

ACM国际大学生程序设计竞赛题解

ACM国际大学生程序设计竞赛题解

赵端阳//袁鹤 / 电子工业 / 2010-6 / 38.00元

《ACM国际大学生程序设计竞赛题解(1)》可以作为高等院校有关专业的本科和大专学生参加国际大学生程序设计竞赛的辅导教材,或者作为高等院校数据结构、C/C++程序设计或算法设计与分析等相关课程的教学参考书。随着各大专院校参加ACM/ICPC热情的高涨,迫切需要有关介绍ACM国际大学生程序设计竞赛题解的书籍。《ACM国际大学生程序设计竞赛题解(1)》根据浙江大学在线题库的前80题,进行了解答(个别特别......一起来看看 《ACM国际大学生程序设计竞赛题解》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试