cocos2d-x运行一次lua脚本两次

时间:2013-09-20 10:19:51

标签: android c++ lua cocos2d-x

我正在开发一个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 /”

出了什么问题?有人可以帮忙吗?

1 个答案:

答案 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...
}