cocos2d-x 3.0에서 Lua 환경 설정

7215 단어 C++cocos2d-x루아
cocos2d-x 3.0에서 Lua를 사용하고 싶었습니다.
그러나 공식이 추천하고 있는 cocos 커맨드로 lua용의 프로젝트를 생성하는 방법이라고, 처음부터 끝까지 모두 Lua로 쓸 수 있는 압력을 느꼈다. 공식 에디터인 CocosCodeIDE가 실제로 Eclipse였다는 것도 마음에 들지 않았기 때문에 기존의 cocos2d-x 프로젝트에 LuaBindings를 통합하는 방법이 없는지 여러가지 조사했다.

...하지만, 어쩐지 영어권도 일본어권에도 제대로 그런 자료가 없어, 정말로 lua를 사용하고 있는 녀석이란 거야? 라고 느껴진 결과, cocos 커맨드로 생성되는 Lua용 프로젝트를 참고로 하는 것이 가장 좋다고 결론지었다.

라는 이유로 기존 cocos2d-x 프로젝트에 LuaBindings를 도입하는 흐름.

필요한 파일을 프로젝트로 가져오기



디폴트로 C++로 프로젝트를 작성했을 경우, 프로젝트 안에 lua용의 파일 카운티는 들어가 있지 않다. 그러므로 그들을 끌어오는 곳에서 시작해야 한다.

필요한 파일 카운티는 2개.
cocos2d-x 3.0을 zip 해동하면 다음과 같은 파일 구성이 되어 있을 것입니다만,



cocos/scripting 복사





external/lua 복사





lua용 xcode project를 기존 프로젝트에 추가



scripting/lua-binding/proj.ios_mac/cocos2d_lua_bindings.xcodeproj를 기존 xcode 프로젝트에 파일로 추가합니다.





Build Phases에 lua 라이브러리 추가





Header Search Path 설정



기존 프로젝트에서 Lua 그룹을 사용하기 위해 헤더 경로를 통과합니다. 귀찮아서 recursive에.



Common Lua 파일 추가



여기에서 마계에 밟아 온 느낌이 있지만, scripting/lua-bindings/script를 프로젝트에 추가한다. 그렇지 않으면 lua 파일에서 Cocos2D.lua를 require 할 수없는 것 같습니다.





Lua 파일을 실행해보기



이제 잘 프로젝트를 빌드할 수 있다면 다음은 c++ 파일 중에서 lua 파일을 호출해 본다. 다음을 참고로.

ぁ tp : // 끓여 rp. 네 t/bぉg/엔기네 r/여기 s2dx_ぅ아/

test.lua
function add (x, y)
    return x + y
end

AppDelegate.cpp

#include "CCLuaEngine.h"

bool AppDelegate::applicationDidFinishLaunching() {

    // 中略

    auto engine = LuaEngine::getInstance();
    ScriptEngineManager::getInstance()->setScriptEngine(engine);
    engine->executeScriptFile("test.lua");

    lua_State* L = engine->getLuaStack()->getLuaState();
    lua_getglobal(L, "add");
    lua_pushinteger(L, 1);
    lua_pushinteger(L, 2);
    if (lua_pcall(L, 2, 1, 0)) {
        CCLOG("error=%s", lua_tostring(L, lua_gettop(L)));
    } else {
        CCLOG("return=%d", lua_tointeger(L, lua_gettop(L)));
    }
    return true;
}


우선 실행할 수 있었다. Lua의 VM을 다루는 방법을 잘 모르겠지만 나머지는 공식 lua의 바인딩을 참고로 cocos2d-x의 API를 호출하거나 해본다.

덤 (cocos 명령으로 생성 된 lua 프로젝트)



cocos명령으로 생성되는 lua의 프로젝트는 잘 볼 때 제대로 ios/android의 프로젝트가 있고, 그 중에서 main.lua라는 lua파일을 상기의 방법으로 실행하고 있다. 런타임에 lua 파일의 업데이트를 반영할 수 있는 것은 Runtime이라는 클래스가 tcp 서버를 생성하여 어쩔 수 없는 것 같다.

그쪽의 프로젝트를 괴롭히는 편이 빠르고 확실한 것일지도 모른다.

좋은 웹페이지 즐겨찾기