内容简介:在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退出江湖的时候都没有解决,还是让我们自己动手吧。
找到CCDataReaderHelper.cpp这个文件,打开。
F3找到下面这个函数。
void DataReaderHelper::addDataFromBinaryCache(const char fileContent, DataInfo dataInfo)
然后找到这个函数最后的位置:
红框的部分,修改为:
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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 云数据存储需要协助解决数据成本困境
- 从PRD文档到产品上线,有哪些问题需要解决?
- 为什么你需要解决你的云技能差距
- 容器编排无法解决微服务的所有问题,你还需要服务网格
- Asp.Net Core API 需要认证时发生重定向的解决方法
- 云计算也需要维护 SDN也需要网工 只不过更智能了
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Introduction to Programming in Java
Robert Sedgewick、Kevin Wayne / Addison-Wesley / 2007-7-27 / USD 89.00
By emphasizing the application of computer programming not only in success stories in the software industry but also in familiar scenarios in physical and biological science, engineering, and appli......一起来看看 《Introduction to Programming in Java》 这本书的介绍吧!