cocos2dx 3.x fullPathForFilename及isFileExist在ios/mac下与win32下行为不同

一,fullPathForFilename

项目先开发了ios/mac版本,这两天想把win32工程也配好,但遇到了部分资源无法正确找到的问题。

进一步观察发现,对于那些找不到的资源路径,fullPathForFilename将传入的短路径直接原样返回,而不是返回全路径。

查看fullPathForFilename的实现代码,有这样一段:

// FIXME: Should it return nullptr ? or an empty string ?
// The file wasn‘t found, return the file name passed in.
return filename;

即当前的处理是如果路径找不到,就将参数原样返回。

因此初步确定是因为路径没找到造成的,那么为什么找不到呢?

在fullPathForFilename的实现内打断点,查看_searchPathArray的值,发现其中的路径是对的:

但其中fullpath = this->getPathForFilename(newFilename, resolutionIt, searchIt)一句返回的fullpath却是空。

于是跟到getPathForFilename中断点,发现在其中path = getFullPathForDirectoryAndFilename(path, file)一句之前构造的路径都是与预期相符的,而此句返回的path却是空字符串。

于是再跟到getFullPathForDirectoryAndFilename中,发现其中有下面代码:

// if the file doesn‘t exist, return an empty string
if (!isFileExistInternal(ret)) {
ret = "";
}

于是明白了,原来是ios/mac上的isFileExistInternal与win32上的isFileExistInternal行为不一致,在ios/mac上,isFileExistInternal无论传入文件路径还是文件夹路径,只要路径存在,都会返回true;而在win32平台上,isFileExistInternal只有传入的是文件路径且文件存在时才会返回true,而如果传入文件夹路径,则总会返回false。我在项目中使用了fullPathForFilename去获得文件夹的全路径,于是在ios/mac下能正常工作,但在win32上不能正常工作。

一个简单的方法是直接将getFullPathForDirectoryAndFilename中那段代码改成:

// if the file doesn‘t exist, return an empty string
if (!isFileExistInternal(ret)
&&!isDirectoryExistInternal(ret)//added [yang chao]
) {
ret = "";
}

这样win32上fullPathForFilename的行为就与ios/mac上相同了。

二,isFileExist

isFileExist中使用了isFileExistInternal函数,所以isFileExist的行为在win32上也与ios/mac上不一致。在ios/mac上,判断文件或文件夹是否存在都可以用isFileExist函数,而在win32平台上isFileExist只能判断文件是否存在,如果想判断文件夹是否存在,要用isDirectoryExist函数。

时间: 2024-10-11 07:35:25

cocos2dx 3.x fullPathForFilename及isFileExist在ios/mac下与win32下行为不同的相关文章

cocos2d-x 3.x游戏开发学习笔记(1)--mac下配置cocos2d-x 3.x开发环境

打开用户文件夹下.bash_profile文件,配置环境 vim ~/.bash_profile //按键i,进行插入编辑(假设输错d进行删除一行) 环境配置过程例如以下: 1.首先配置下android sdk,我的是在opt文件夹下 #sdk export ANDROID_SDK_ROOT=/opt/android-sdk-macosx export PATH=$PATH:$ANDROID_SDK_ROOT export PATH=$PATH:$ANDROID_SDK_ROOT/platfor

iOS - Mac 下查看网络端口占用情况

1.Mac 下查看网络端口占用情况 有的时候关闭了服务器,但是端口还是占用,解决的方法是 kill 掉占用该端口的进程. # 查看 8009 端口的占用情况 $ lsof -i:8009 可以看到,该端口被 id 为 4215 的进程所占用,这个时候直接在命令行输入以下命令该进程就会被中止,端口成功释放出来. # 中止进程 4215 $ kill 4215 原文地址:https://www.cnblogs.com/QianChia/p/8531569.html

Cocos2d-x iOS Mac环境编译出错 can't locate file for: -lpng -ljpeg -ltiff -lwebp -lfreetype -lwebsockets -lcurl

在Mac上用Xcode6编译错误,在windows下面Visual Studio 编译没问题,然后查看报错信息: error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: can't locate file for file: -lpng is not an object file (not allowed in a library) 1 error

Cocos2d-x 3.0游戏开发之虚拟机IOS环境:匹配才是好,莫要随便升级软件

尊重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/34110449 做为一个买不起MAC的Coder,只好使用虚拟机. 前不久,重装了系统,又把虚拟机升级到了10.0... 然后启动MAC,一直失败,不知道什么原因... 有砸电脑的冲动了... 忽然, 灵思一动, 卸载了10.0,回归到VMware8.0, 再次启动MAC, 柳暗花明... 至今原因未知, 又想起了,几年前就因为升级遇到的各种坎坷, 特

mac下cocos2dx(带jsoncpp第三方库)编译为android项目心得

在mac下好不容写完了游戏,本以为轻轻松松就能编译为android项目,想不到弄了将近1整天才将问题解决 首先不带jsoncpp的编译方式请参考:http://www.bold-it.com/ios/cocos2d-x-box2d-iosandroid-hybrid-tutorial/ 带jsoncpp第三方库的参考了http://blog.csdn.net/sniffer12345/article/details/7336732,对作者表示感谢. 我使用的是正常的jsoncpp版本,在json

cocos2dx 2.2.3 xcode5.0,新建mac项目报错

cocos2dx 2.2.3 xcode5.0,新建mac项目报错 Undefined symbols for architecture x86_64: "cocos2d::extension::LabelReader::createInstance()", referenced from: cocos2d::extension::GUIReader::GUIReader() in GUIReader.o "cocos2d::extension::ButtonReader::

Mac下编译libpomelo静态库,并在cocos2dx项目中引用

最近在学习cocos2dx的过程中需要和服务器进行交互,所以这几天在学习libpomelo静态库的编译和使用.之前在windows系统下编译libpomelo,并在VS中引入比较顺利:但是,目前对Mac系统和XCode不是很熟悉,所以多花了些时间.不过,最终还是成功了,在这里就将我编译引入libpomelo静态库的过程记录下来,也分享给和我一样遇到问题的朋友们. 准备工作 libpomelo下载地址:https://github.com/NetEase/libpomelo或者http://pan

cocos2d-x 3.0在mac下的基本配置

随着3.0正式版的发布,有必要开始对其进行一番研究.首先就从环境搭建以及基本的配置开始. 其实在cocos2d-x的官方wiki中已经有了比较详细的介绍,只不过是英文的,这里针对实际操作给大家简单翻译说明一下. 创建一个cocos2d-x项目 1.1 环境需要 Android 2.3 或更新版本 ios 5.0 或更新版本 OS X 10.7 或更新版本 Xcode 4.6 以上版本 gcc 4.7 和Android ndk-r9以上版本 Python 2.7.5 1.2 创建一个新的项目 首先

cocos2dx 2.2.3 xcode5.0,新mac项目错误

cocos2dx 2.2.3 xcode5.0,新建mac项目报错 Undefined symbols for architecture x86_64: "cocos2d::extension::LabelReader::createInstance()", referenced from: cocos2d::extension::GUIReader::GUIReader() in GUIReader.o "cocos2d::extension::ButtonReader::