在开发过程中,我遇到了关于子目录资源或代码无法访问的问题.
这个跟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);