关于无法访问子目录资源的问题

在开发过程中,我遇到了关于子目录资源或代码无法访问的问题.

这个跟FileUtils的查询路径的设置有关,在我们默认创建的项目中

会进行如下设置:

cc.FileUtils:getInstance():addSearchResolutionsOrder("src");
cc.FileUtils:getInstance():addSearchResolutionsOrder("res");

首先说一下代码的目录访问,如果我们在src下建立一个子目录com

又在其com下简历一个game的话,game下的.lua文件用下面的require

方式是不会被找到的:

require("com.game.XXXXX").

而必须用: require("src.com.game.XXXXX").

而资源访问的问题是在于如果在子目录中有资源,比如有res/test/role.png

我们在代码中需要创建一个Sprite.
    local sprite = cc.Sprite:create("test/role.png")

这样是无法找到role.png.

那么要怎么做?如下:
FLAG_FILENAME = "main.lua" -- 以此文件名为标记来获取当前文件路径
SOURCE_ROOTNAME = "src" -- 代码根目录
RESOURCE_ROOTNAME = "res" -- 资源根目录

-- 首先我们根据代码的根目录和我们一个标记文件来获取绝对路径(不知道有没有不用FLAG_FILENAME来获取的方法,

这样看着很蠢),然后在解析出srcDict代码路径,同样的解析并拼接RESOURCE_ROOTNAME,这样就有了resDict资源路径

    local fullpath = cc.FileUtils:getInstance():fullPathForFilename(SOURCE_ROOTNAME .. "/" .. FLAG_FILENAME)
    local index = string.find(fullpath,FLAG_FILENAME) - 1
    local srcDict = string.sub(fullpath,0,index)
    index = string.find(fullpath, SOURCE_ROOTNAME) - 1
    local resDict = string.sub(fullpath,0,index) .. RESOURCE_ROOTNAME
    cclog(resDict)
    --- 有了这些路径后使用addSearchPath来设置代码和资源的查询路径,以此保证子目录代码和资源的访问
cc.FileUtils:getInstance():addSearchPath(srcDict);
    cc.FileUtils:getInstance():addSearchPath(resDict);
    cc.FileUtils:getInstance():addSearchResolutionsOrder(SOURCE_ROOTNAME);
cc.FileUtils:getInstance():addSearchResolutionsOrder(RESOURCE_ROOTNAME);


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值