0

我正在开发一个 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());
}

以下案例是在安卓手机中运行应用

当它运行“LogicScene.lua”时,一切都按预期进行。当它从 Logic 场景返回到 MainScene 时,它​​也很顺利。但是当主场景再次尝试运行“LogicScene.lua”时,什么也没有发生。它只保留在主要场景中。LogicScene.lua 没有日志输出。

我通过编写一个只打印日志的 test.lua 对其进行了测试。主场景第一次运行 test.lua 时,logCat 中显示了一条日志。但是当 test.lua 第二次来回运行时,什么都没有发生。

我使用数千个关键字在谷歌上搜索了数千次,但没有发现任何有用的信息。

令人惊讶的是,当我在 Windows 上测试它时,一切都很好。

PS,在android set上,所有脚本都放在“assets/luaScripts/”中,而LogicScene.lua需要一些其他的lua脚本在“assets/luaScripts/”中。

而在windows上,所有脚本都放在“Resources/luaScripts/”

怎么了?任何人都可以帮忙吗?

4

1 回答 1

2

我找到了解决这个问题的方法。

对于安卓版本,

CCLuaEngine::defaultEngine()->executeScriptFile(arg) 它使用 require 语句来执行 arg。

所以当 CCLuaEngine::defaultEngine()->executeScriptFile 第二次或第四次在同一个 lua 文件上调用时,什么都不会发生。

我修改了 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...
}
于 2013-09-21T16:05:23.323 回答