cocos2d Lua 학습(一)

ios에서 루아 함수 호출 및 전참 방법
    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는 반환 값을 모두 창고 공간에 넣을 것을 보장합니다.함수 반환 값은 정렬에 따라 창고를 압축합니다. (첫 번째 반환 값은 창고를 먼저 압축합니다.) 따라서 호출이 끝난 후에 마지막 반환 값은 창고 꼭대기에 놓입니다.
void lua_pushnumber (lua_State *L, lua_Number n);

숫자 하나LUA_MULTRET를 창고에 보관하다.
lua_Integer lua_tointeger (lua_State *L, int idx);

주어진 색인에 있는 Lua 값을 n 와 같은 기호 정수 형식으로 변환합니다.이 Lua 값은 숫자 또는 숫자로 변환할 수 있는 문자열이어야 합니다(§2.1 참조).그렇지 않으면 lua_Integer 0이 반환됩니다.
만약 숫자가 정수가 아니라면, 소수 부분을 자르는 방식은 명확하게 정의되지 않았다.
void lua_pop (lua_State *L, int n);

스택에서 lua_tointeger 개의 요소를 꺼냅니다.

좋은 웹페이지 즐겨찾기