如何在cocos2d-x中将变量传递给lua函数?

时间:2014-01-01 04:47:23

标签: c++ lua cocos2d-x

我试图在cocos2d-x中调用lua函数。但是当我尝试将一些变量传递给lua函数时。我的程序停在lua_call()

我的功能:

const char* getData::callLuaFunction(const char* luaFileName,const char* functionName){
    lua_State*  ls = CCLuaEngine::defaultEngine()->getLuaStack()->getLuaState();

    std::string filefullpath = CCFileUtils::sharedFileUtils()->fullPathForFilename(luaFileName);
    const char* pfilefullpath = filefullpath.c_str();
    int isOpen = luaL_dofile(ls, pfilefullpath);
    if(isOpen!=0){
        CCLOG("Open Lua Error: %i", isOpen);
        return NULL;
    }

    lua_getglobal(ls, functionName);

    lua_pushstring(ls, "einverne");
    lua_pushnumber(ls, 2);
    lua_pushboolean(ls, true);

    lua_call(ls, 3, 1);
    const char* iResult = lua_tostring(ls, -1);
    return iResult;
}

lua文件中的函数:

function luaLogString(_logStr,_logNum,_logBool)
    print("Lua string from C:",_logStr,_logNum,_logBool)
    return "call lua function OK"
end

编辑: 我发现lua_call没有受到保护。 lua_pcall功能更安全。在我改为lua_pcall之后。错误显示attempt to call global '聽聽聽聽print' (a nil value)

1 个答案:

答案 0 :(得分:2)

其实我发现了问题。

我在lua文件中的print函数之前删除了四个空格,一切正常。

我建议新手使用lua_pcall而不是lua_call。因为如果在调用lua_call时出错,则此函数将调用exit(EXIT_FAILURE)并关闭主机程序而不会给出错误消息。

lua_pcalllua_call

之间的差异