`
Rudolph
  • 浏览: 67455 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Cocos2d-x 的资源路径

阅读更多

今天发现项目在VS调试时正常运行,直接在生成目录执行exe是黑屏

原因是资源文件加载的问题,找不到图片,所以黑屏了

 

那么cocos2d-x是怎么查找图片的呢

以下是关键部分源码:

 

获得完整路径

 

pathKey = CCFileUtils::sharedFileUtils()->fullPathForFilename(pathKey.c_str());

 

/** Returns the fullpath for a given filename.
     
     First it will try to get a new filename from the "filenameLookup" dictionary.
     If a new filename can't be found on the dictionary, it will use the original filename.
     Then it will try to obtain the full path of the filename using the CCFileUtils search rules: resolutions, and search paths.
     The file search is based on the array element order of search paths and resolution directories.
     
     For instance:

     .....

     @since v2.1
     */
    virtual std::string fullPathForFilename(const char* pszFileName);

 

首先判断如果已经是绝对路径则return

其次从缓存中查询(即之前已经加载过的资源,以你传递的关键字做key会做路径缓存)

如果还是找不到则从文件名查找字典中做匹配

就会从查询路径数组来一个个匹配查找

到了这里就会发现m_searchPathArray里已经存在了一个该项目目录下的Resource文件夹路径

那显然是在初始化的时候哪里设置了默认路径,继续追踪

 

这里CCFileUtils在初始化的时候会将默认资源路径String添加到数组中

 

bool CCFileUtils::init()
{
    m_searchPathArray.push_back(m_strDefaultResRootPath);
    m_searchResolutionsOrderArray.push_back("");
    return true;
}

 

继续查找m_strDefaultResRootPath是在哪里赋值

 

查找到子类的构造函数,例如我当前是win32项目则CCFileUtilsWin32.cpp中

 

bool CCFileUtilsWin32::init()
{
    _checkPath();
    m_strDefaultResRootPath = s_pszResourcePath;
    return CCFileUtils::init();
}

 

static void _checkPath()
{
    if (! s_pszResourcePath[0])
    {
        WCHAR  wszPath[MAX_PATH] = {0};
        int nNum = WideCharToMultiByte(CP_ACP, 0, wszPath,
            GetCurrentDirectoryW(sizeof(wszPath), wszPath),
            s_pszResourcePath, MAX_PATH, NULL, NULL);
        s_pszResourcePath[nNum] = '\\';
    }
}

 

这里因为是win32平台则就是通过

DWORD GetCurrentDirectoryW(DWORD nBufferLength, LPWSTR lpBuffer)

这个win32API函数来获取当前的工作目录了,当然其他平台也应该是对应平台的获取方式

 

然后,打开项目属性管理器面板,调试子面板中,发现这里通过cocos2d-x模板生成的项目,

默认将工作目录设置为了$(ProjectDir)..\Resources,所以通过调试时得到的工作目录便是这个Resources文件夹了。



 

那么最后,解决的办法就是将图片拷贝到exe所在的文件目录下,

因为exe所在的目录就是当前工作目录,则可以匹配上!

  • 大小: 44.2 KB
分享到:
评论

相关推荐

    Cocos2d-x实战C++卷关东升著完整版pdf

    总之,《Cocos2d-x实战C++卷》全面覆盖了Cocos2d-x游戏开发的各个环节,从基础到进阶,为读者提供了一条清晰的学习路径。通过阅读并实践书中的示例,读者可以逐步成长为熟练的Cocos2d-x游戏开发者。

    cocos2d-x-3.13.1 spine3.6.zip

    在资源管理方面,Cocos2d-x 3.13.1版本优化了资源加载和释放机制,这有利于减少内存消耗,提高游戏性能。开发者需要确保正确地加载和释放Spine动画资源,避免内存泄漏。此外,考虑到移动设备的性能限制,合理地优化...

    cocos2d-x 《保卫萝卜》源代码

    《保卫萝卜》是一款深受玩家喜爱的塔防类游戏,它基于Cocos2d-x引擎开发。Cocos2d-x是一个跨平台的2D游戏开发框架,由C++编写,但支持Lua和Python等多种脚本语言,让开发者可以快速构建游戏。在这里,我们将深入探讨...

    cocos2d-x-android环境搭建文档

    在Eclipse中配置Cocos2d-x项目,你需要设置项目的NDK路径和Ant构建脚本。NDK是Android的Native Development Kit,用于处理C/C++代码。Ant是Apache的一个构建工具,Cocos2d-x使用它来编译项目。确保Eclipse的Android ...

    cocos2D-x3.10安装

    【Cocos2D-x3.10安装】和【Win10中安装VS2015配置Cocos2D-x3.10】涉及到的是在Windows ...在开发过程中,VS2015的调试功能可以帮助快速定位和修复错误,而Cocos2D-x提供的各种工具则能简化游戏资源管理和项目构建流程。

    cocos2D-lua 核心编程内置代码

    《Cocos2d-lua核心编程内置代码》深入解析 Cocos2d-lua是一款基于Cocos2d-x引擎的轻量级游戏开发框架,...无论是新手还是经验丰富的开发者,这个资源都是宝贵的参考资料,帮助你更好地掌握Cocos2d-lua的核心编程技术。

    cocos2d-x贼来了塔防

    《cocos2d-x贼来了塔防》很可能包含了各种不同的防御塔,每种塔都有其独特的攻击方式、射程和升级路径,玩家可以通过赚取的游戏资源来建造和升级它们。 Cocos2d-x引擎在游戏开发中的应用十分广泛,它提供了丰富的...

    cocos2d-x-3.5+vs2012模板

    在项目属性中,找到“VC++目录”,在“包含目录”中添加cocos2d-x的头文件路径,在“库目录”中添加库文件路径。 5. 在项目属性的“链接器”->“输入”中,添加cocos2d-x所需的库文件,如"libcocos2d.lib"等。 6. ...

    Cocos2d-x 3.X游戏开发入门精解

    首先,书中会介绍Cocos2d-x的基础知识,包括安装环境、创建项目、设置资源路径等,使读者对Cocos2d-x的开发环境有一个全面的认识。这一部分还会讲解如何使用Cocos Studio进行图形界面设计,以及如何将设计成果导入到...

    Cocos2d-x实战:Lua卷

    3. **Cocos2d-x与Lua的集成**:学习如何配置Cocos2d-x项目以支持Lua,包括安装tolua++,设置Lua脚本路径,以及在C++代码中调用Lua函数和在Lua中调用C++函数的方法。 4. **游戏逻辑实现**:通过Lua编写游戏的逻辑...

    一个cocos2d-x 的飞船射击子弹

    总之,"Cocos2d-x 飞船射击子弹游戏示例"是一个基础但全面的学习资源,涵盖了2D游戏开发中的核心概念,包括精灵、动作、事件监听和项目集成。对于初学者来说,这是一个很好的起点,可以帮助他们快速上手Cocos2d-x,...

    cocos2d-x创建项目配置文件

    Cocos2d-x是一款强大的开源游戏开发框架,广泛应用于2D游戏、实验性的3D游戏以及各种互动应用的开发。它的跨平台特性使得开发者可以用C++编写代码,然后在iOS、Android、Windows、Mac等多个平台上运行。在较新的...

    Cocos2d-x实战lua卷

    《Cocos2d-x实战Lua卷》是一本深入探讨Cocos2d-x游戏开发与lua脚本结合使用的专业书籍。Cocos2d-x是一个开源的游戏引擎,广泛应用于2D游戏开发,而Lua则是一种轻量级的脚本语言,以其简洁易学、高效灵活的特点,常被...

    cocos2d-x学习笔记

    《cocos2d-x学习笔记》 在学习cocos2d-x时,了解其核心组件和工作流程至关重要。AppDelegate是cocos2d-x框架中的一个关键类,它扮演着应用程序入口点的角色,处理应用程序的生命周期事件。让我们深入探讨...

    cocos2d-x android 环境搭建和编译文档

    5. **性能优化**:根据项目需求,你可以使用Cocos2d-x提供的各种性能优化技巧,如纹理 atlasing、资源预加载、内存管理等,以提升游戏性能。 总结,搭建Cocos2d-x Android环境并编译项目涉及多个步骤,包括安装必要...

    cocos2d-x 3.6创建项目代码

    总之,创建cocos2d-x 3.6项目需要对C++编程和Android/iOS开发有一定的了解,遇到问题时要耐心排查,利用各种资源解决问题。通过不断实践和学习,你将能够熟练掌握cocos2d-x,开发出高质量的2D游戏和应用。

    cocos2d-x 学习资源网站汇总

    #### 一、Cocos2d-x概览与学习路径 Cocos2d-x是一款跨平台的游戏开发框架,支持C++、JavaScript和Lua等语言,广泛应用于移动游戏的开发。它提供了丰富的2D图形渲染功能、物理引擎、动画系统、声音管理以及网络通信...

    cocos2d-x配置教程,主要关于移植android

    Cocos2d-x是一款流行的开源游戏开发框架,主要用于2D游戏、实时应用和互动内容的创建。本教程将深入探讨如何在Windows环境下配置cocos2d-x,以便于将项目移植到Android平台。这个过程可能相对复杂,但一旦设置完成,...

    Cocos2d-x高级开发教程制作自己的 捕鱼达人pdf和源代码

    《Cocos2d-x高级开发教程制作自己的捕鱼达人》是一份深入探讨Cocos2d-x游戏引擎的资源,包括PDF教程和源代码。Cocos2d-x是一款广泛应用于跨平台2D游戏开发的开源框架,它支持iOS、Android、Windows等多平台,采用C++...

    cocos2d-iphone~cocos2d-html5移植之旅

    对于熟悉cocos2d-iphone或cocos2d-x的开发者而言,cocos2d-html5提供了无缝过渡的可能,让开发者能够在新的平台上快速上手,展示其技术实力。 #### 移植至HTML5的驱动力 HTML5游戏开发之所以吸引人,主要在于其...

Global site tag (gtag.js) - Google Analytics