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.luafunction 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 서버를 생성하여 어쩔 수 없는 것 같다.
그쪽의 프로젝트를 괴롭히는 편이 빠르고 확실한 것일지도 모른다.
Reference
이 문제에 관하여(cocos2d-x 3.0에서 Lua 환경 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/keroxp/items/c8dec8b81903d38b369e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이제 잘 프로젝트를 빌드할 수 있다면 다음은 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 서버를 생성하여 어쩔 수 없는 것 같다.
그쪽의 프로젝트를 괴롭히는 편이 빠르고 확실한 것일지도 모른다.
Reference
이 문제에 관하여(cocos2d-x 3.0에서 Lua 환경 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/keroxp/items/c8dec8b81903d38b369e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(cocos2d-x 3.0에서 Lua 환경 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/keroxp/items/c8dec8b81903d38b369e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)