我正在开发一个cocos2d-x应用程序。 该应用程序以用C ++编写的主场景开始。 主场景将创建一个用lua编写的逻辑场景。 以下是主场景中的代码:
void CMainSceneLayer::menuSelectedCallBack(cocos2d::CCObject * pSender)
{
std::string scriptFile = "luaScripts/LogicScene.lua";
scriptFile = CCFileUtils::sharedFileUtils()->fullPathForFilename(scriptFile.c_str());
CCLog("scriptFile: %s\n", scriptFile.c_str());
CCLuaEngine::defaultEngine()->executeScriptFile(scriptFile.c_str());
}
以下案例是在Android手机中运行应用程序
当它运行“LogicScene.lua”时,一切顺利。 当它从Logic场景返回到MainScene时,它也很好。 但是当主场景试图再次运行“LogicScene.lua”时,没有任何反应。 它只是留在主场景中。没有日志来自LogicScene.lua。
我通过编写一个只打印日志的test.lua来测试它。 当test.lua第一次被主场景运行时,logCat中显示了一个日志。 但是当test.lua第二次运行时,什么也没发生。
我使用数以千计的关键字搜索了数千次,没有找到任何帮助。
令人惊讶的是,当我在Windows上测试时,一切都很顺利。
PS,在android集上,所有脚本都放在“assets / luaScripts /”中 和LogicScene.lua在“assets / luaScripts /".
中需要一些其他的lua脚本在Windows上,所有脚本都放在“Resources / luaScripts /”
中出了什么问题?有人可以帮忙吗?
答案 0 :(得分:2)
我找到了解决这个问题的方法。
对于Android版本,
CCLuaEngine :: defaultEngine() - > executeScriptFile(ARG) 它使用require语句来执行arg。
所以当第二次或第二次在同一个lua文件上调用CCLuaEngine :: defaultEngine() - > executeScriptFile时,什么都不会发生。
我修改了lua / cocos2dx_support / CCLuaStack.cpp中的源文件来解决这个问题。
在这里,我粘贴了我的解决方案的代码:
int CCLuaStack::executeScriptFile(const char* filename)
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
//std::string code("require \""); //origin code
std::string code(std::string("package.loaded[\"") + std::string(filename) + std::string("\"] = nil\n")); //this line was added by me
code.append("require \"");
code.append(filename);
code.append("\"");
return executeString(code.c_str());
#else
//more codes...
}