Quick CCLuaStack::executeScriptFile 无法执行path中带.的文件夹名

quick 版本 2.2.3 android

“/data/data/com.xxoo.game/files/main.lua” 会解析成 “/data/data/com/xxoo/game/files/main.lua” 只在 android上才会出现。

这个确实是这样的,因为在Android上,点号在很多时候都表示路径的分隔。
由于这是系统的默认处理,修改恐怕会影响更多,所以最好还是不要修改了,只建议不要进行这样的调用。

但是做更新的时候 device.writablePath…"upd/"保存路径中就有点 那也就是说这个路径下不能有.lua
而且这个方法中为什么要单独为android做处理?如果是按照ios流程来走就可以规避这个问题。

int CCLuaStack::executeScriptFile(const char *filename)
{
CCAssert(filename, “CCLuaStack::executeScriptFile() - invalid filename”);
std::string fullPath = CCFileUtils::sharedFileUtils()->fullPathForFilename(filename);
unsigned long chunkSize = 0;
unsigned char chunk = CCFileUtils::sharedFileUtils()->getFileData(fullPath.c_str(), “rb”, &chunkSize);
if (lua_loadbuffer(m_state, (const char
)chunk, (int)chunkSize, fullPath.c_str()) == 0)
{
return executeFunction(0);
}
return 0;
} 不能按照这个来走吗?

这样处理是可以的,我在你的另一个帖子已经这样建议了。

quick 中原码是这样的
int CCLuaStack::executeScriptFile(const char *filename)
{
CCAssert(filename, “CCLuaStack::executeScriptFile() - invalid filename”);
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
std::string code(“require “”);
code.append(filename);
code.append(”"");
return executeString(code.c_str());
#else
std::string fullPath = CCFileUtils::sharedFileUtils()->fullPathForFilename(filename);
unsigned long chunkSize = 0;
unsigned char chunk = CCFileUtils::sharedFileUtils()->getFileData(fullPath.c_str(), “rb”, &chunkSize);
if (lua_loadbuffer(m_state, (const char
)chunk, (int)chunkSize, fullPath.c_str()) == 0)
{
return executeFunction(0);
}
return 0;
#endif
}
我想问的时当初为什么要对android 单独做处理,有什么其他目的? 我修改有会不会存在其他问题?

我也不知道为什么Android要单独处理,用require的不同之处是会先判断这一个chunk是否已经被载入过,如果已经被载入则不重复加载而已。从这个函数来说,用require来实现效率并不高。你直接修改是没什么问题的。

好的 我的问题解决了。