require路径问题

//添加lua资源路径,无法使用addSearchResolutionsOrder
CCFileUtils::sharedFileUtils()->addSearchPath(LUA_FOLDER.c_str());
//添加UI资源路径
CCFileUtils::sharedFileUtils()->addSearchResolutionsOrder(UI_FOLDER.c_str());

如上,本来想将lua文件夹设为资源路径的,可是发现require没办法找到lua文件,但是设为搜索路径是可以的
可是如果设为搜索路径的话,将会导致我的更新地址也还要再设一个提供给lua使用的搜索路径

我使用的版本是2.2.3,暂时只在win32中测试

我晕死,发现改为require "Extension\hello2"来代替"Extension/hello2"的话就可以了……
这是逼我重写require么…… :10:

这个我也不太熟悉,已经联系lua团队帮忙解决

好吧,我脑抽经了,顺便贴代码

_require = require;

local function require(path)
path = string.gsub(path, “/”, “\”);
return _require(path);
end

这个不完全的代码,大概这个样子了啦 :9:

你根本不需要,也不应该改啊。
require会去找loader, 2dx载入了一个自己的loader,
这个loader, 用FileUtils 去获取文件数据 根据文件名。
文件路径的转换2dx已然全部都做好了啊, 要么是你没按范式来。。。

比如我的lua文件全在Resources/LuaScript里面的
然后我使用CCFileUtils::sharedFileUtils()->addSearchResolutionsOrder(“LuaScript/”)
你试一下在LuaScript的hello1里面require “Extension/hello2” 行不行
hello2在LuaScript/Extension里面……

require \“luaScript/ZwoptexTest/ZwoptexTest\”
require \“luaScript/LuaBridgeTest/LuaBridgeTest\”
require \“luaScript/XMLHttpRequestTest/XMLHttpRequestTest\”
require \“luaScript/PhysicsTest/PhysicsTest\”

上面是2dx TestLua中的代码,我一行也没动过。运行正常

我自己的代码中require也一切正常,没有转换过目录分割符

你这样子全路径当然没错啦……这个我也知道啊
问题是当我想把luaScript设为资源路径的时候就报错了说,然后转换分隔符就行了 :6:

仔细看了下你5楼的帖子,发现你用的是 CCFileUtils::sharedFileUtils()->addSearchResolutionsOrder(“LuaScript/”) (原帖不是用的addSearchPath么??)

addSearchResolutionsOrder添加的叫做resourceDirector, addSearchPath添加的是searchPath (一个在file_path后,一个在file_path前)
最终的路径为 searchPath + file_path + resourceDirectory + filename

你5楼里面,原始资源路径假设为 ~
CCFileUtils::sharedFileUtils()->addSearchResolutionsOrder(“LuaScript/”)
require “Extension/hello2”
最终的路径(如果没其它搜索路径的影响)因该为 :~/Extension/LuaScript/hello2.lua 。你是hello2在LuaScript/Extension里面…… 必然应该找不到。
如果你 require “a/b/c/d/lua” 最后应该为: ~/a/b/c/d/LuaScript/lua.lua

如果你是用的addSearchPath(\“LuaScript\”) 那么上例应该为, ~/LuaScript/Extension/hello.lua 和 ~/LuaScript/a/b/c/d/lua.lua

至于为啥你最后转换了目录分隔符就找到了,我觉得是不应该的,要么就是你其他的搜索目录影响到了。

我我我我晕死……一直都以为是searchPath + resourceDirectory + filePath + fileName的
原来resourceDirectory前面会插入filePath
请原谅我没有仔细看注释,和没有去看源码 :12:
还有谢谢您的解答……

我本来是想着将更新的DownloadPath也设为searchPath,然后只需要设LuaScript为resourceDirectory就能实现
DownloadPath + resourceDirectory + filePath + fileName 和
Resource + resourceDirectory + filePath + fileName 的效果
看来我需要手动为searchPath添加DownloadPath/LuaScirpt才行了……

再次感谢您在我对公司项目和毕设作出更改前为我解惑……
至于为什么转换分隔符能找到,我再跟踪一下代码看看为什么吧,不过我是新建项目来测试的说 :12:

知道为什么了……
在查找fullPath的时候,回去找getPathForFileName
但是getPathForFileName使用的是size_t pos = filename.find_last_of("/");
所以我转为\的时候,它没能找到/,所以整个都变当成fileName了,然后win32又能识别\,所以就能找到了
还真是感谢您的点醒啊 :14: