cocos2d-x3.3指定资源路径的代码

2015年03月09日 09:33 0 点赞 0 评论 更新于 2025-11-21 16:46

今天在开发过程中遇到一个问题:项目在 VS 调试时能够正常运行,但直接在生成目录执行 exe 文件却出现黑屏现象。经过排查,发现问题出在资源文件的加载上,由于程序找不到图片,所以界面显示为黑屏。

那么,cocos2d-x 是如何查找图片的呢?下面我们来分析关键部分的源码。

cocos2d-x 查找图片的流程

  1. 获得完整路径
    • 首先,判断传入的路径是否为绝对路径,如果是,则直接返回该路径。
    • 其次,程序会从缓存中进行查询。这里的缓存是指之前已经加载过的资源,会以传递的关键字作为 key 进行路径缓存。
    • 如果在缓存中找不到对应的路径,程序会从文件名查找字典中进行匹配。
    • 最后,程序会从查询路径数组中逐个进行匹配查找。在这个过程中,我们会发现 m_searchPathArray 里已经存在一个该项目目录下的 Resource 文件夹路径。
  2. 默认资源路径的设置:显然,这个默认路径是在初始化的时候设置的。继续追踪代码,我们发现 CCFileUtils 在初始化时会将默认资源路径 String 添加到数组中。接下来,我们需要查找 m_strDefaultResRootPath 是在哪里赋值的。对于我当前的 win32 项目,在 CCFileUtilsWin32.cpp 文件的子类构造函数中可以找到相关代码。
    • 在 win32 平台,程序通过 DWORD GetCurrentDirectoryW(DWORD nBufferLength, LPWSTR lpBuffer) 这个 win32 API 函数来获取当前的工作目录。当然,其他平台也会采用对应平台的获取方式。
  3. 项目属性中的工作目录设置:打开项目属性管理器面板的调试子面板,我们可以发现,通过 cocos2d-x 模板生成的项目,默认将工作目录设置为了 $(ProjectDir)..\\Resources。因此,在调试时,程序得到的工作目录就是这个 Resources 文件夹。

解决方案

既然问题已经明确,那么解决办法就是将图片拷贝到 exe 所在的文件目录下。因为 exe 所在的目录就是当前工作目录,这样程序就可以成功匹配到图片资源,黑屏问题也就迎刃而解了。

综上所述,通过分析 cocos2d-x 查找图片的源码,我们找到了项目在不同运行方式下出现黑屏的原因,并给出了相应的解决办法。希望这篇文章能对遇到类似问题的开发者有所帮助。

作者信息

boke

boke

共发布了 3994 篇文章