cocos2d Lua学习(一)

ios中调用lua函数及传参方法

    CCScriptEngineProtocol* pEngine = CCLuaEngine::engine();
    CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);
    string path = CCFileUtils::sharedFileUtils()->fullPathFromRelativePath("hello.lua");
    pEngine->addSearchPath(path.substr(0, path.find_last_of("/")).c_str());
    pEngine->executeScriptFile(path.c_str());
    lua_State* state = pEngine->getLuaState();
    lua_getglobal(state,"myadd");   //查找lua_add函数,并压入栈底  
    pEngine->pushFloatToLuaStack(3);    //函数参数1 
    pEngine->pushFloatToLuaStack(4);    //函数参数12
    lua_pcall(state,2,1,0); //调用myadd函数,同时会对myadd及两个参加进行出栈操作,并压入返回值
    int result = lua_tointeger(state,-1);//从栈中取回返回值  
    lua_pop(state,1);//清栈,由于当前只有一个返回值 
    CCLog("result = %d",result);


lua代码:

function myadd(x, y)
    print(os.date())
    return x + y
end

输出结果:

Mon Aug  6 10:51:26 2012
Cocos2d: result = 7


lua调用C++方法:

    lua_getglobal(state,"lua_add");   //查找lua_add函数,并压入栈底  
    lua_register(state,"add",add);

add函数:

int add(lua_State* L)  
{  
    CCLog("************add**********");
    int a = lua_tointeger(L,1);//取得函数参数  
    int b = lua_tointeger(L,2);  
    
    lua_pushinteger(L,a+b);//入栈返回值  
    return 1;//1表示压入栈数据个数  
}

lua代码:

function lua_add(a,b)
   return add(a,b)
end


输出结果:

Cocos2d: ************add**********
Cocos2d: result = 7



void lua_call (lua_State *L, int nargs, int nresults);

调用一个函数。

要调用一个函数请遵循以下协议: 首先,要调用的函数应该被压入堆栈; 接着,把需要传递给这个函数的参数按正序压栈; 这是指第一个参数首先压栈。 最后调用一下lua_call; nargs 是你压入堆栈的参数个数。 当函数调用完毕后,所有的参数以及函数本身都会出栈。 而函数的返回值这时则被压入堆栈。 返回值的个数将被调整为nresults 个, 除非 nresults 被设置成 LUA_MULTRET。 在这种情况下,所有的返回值都被压入堆栈中。 Lua 会保证返回值都放入栈空间中。 函数返回值将按正序压栈(第一个返回值首先压栈), 因此在调用结束后,最后一个返回值将被放在栈顶。


void lua_pushnumber (lua_State *L, lua_Number n);

把一个数字 n 压栈。


lua_Integer lua_tointeger (lua_State *L, int idx);

把给定索引处的 Lua 值转换为 lua_Integer 这样一个有符号整数类型。 这个 Lua 值必须是一个数字或是一个可以转换为数字的字符串 (参见 §2.2.1); 否则,lua_tointeger 返回 0 。

如果数字不是一个整数, 截断小数部分的方式没有被明确定义。


void lua_pop (lua_State *L, int n);

从堆栈中弹出 n 个元素。



你可能感兴趣的:(ios,function,String,Integer,lua,Path)