티스토리 뷰

Lua로 코딩을 하다보면 Lua에서 하는 것보다는 엔진에서 뭔가 해줬으면 하는 경우가 있다. 이유로는 퍼포먼스 등이 있겠다. Cocos2d-x에서는 toLua(++)을 사용해서 C++ 코드로 작성해둔 것을 Lua에서 가져와 사용할 수 있도록 할 수 있는데, 이게 한국어 가이드는 별로 없더라. 중국어 자료가 많이 나오는데.... 중국어 자료를 읽는 고통을 다른 한국 개발자 분들이 겪지 않았으면 하는 마음에서 포스팅한다.


toLua로 바인딩하는 작업을 크게 분류하면 다음과 같다.

1. 내 Custom Class를 만든다.

2. pkg 파일을 만든다.

3. 빌드한다.



좀 더 자세히 살펴보자.


1. 내 Custom Class를 만든다.

본인이 사용하고 싶은 클래스가 있을 것이다. 이 글에서는 다음 파일의 MySprite라는 클래스를 예시로 사용한다. 간단한 이동 액션을 반복적으로 취하는 클래스이다. (눈에 잘 보이게 하려고 이렇게 했다.)


MySprite.cpp

MySprite.h


문제는 이 소스들을 어디에 놔둬야 하는가이다. 결론부터 말하자면 간단하게도 각각의 프로젝트들 폴더 안의 Classes 폴더에 두면 된다. 너무 당연한거라 사람들이 말을 안 해 놓더라.... 



2. pkg 파일을 만든다.

pkg 파일을 만들면 toLua 툴에서 자동으로 소스를 수정하고 빌드해준다. 그 전에 밟아야 할 절차 같은 것이다. tools 폴더로 가보자. tolua++이라는 폴더가 있을 것이다. 개인적으로는 이 폴더를 복사해서 따로 하나 더 만드는걸 추천한다. 혹시 모를 상황에 복구하기 쉬우니깐...




나 같은 경우에는 tolua++ 폴더를 복사해서 tolua++_my라는 폴더를 만들었다. 그리고 위 사진을 보면 MySprite.pkg라는 파일이 보일 것이다. 이 pkg 파일이 내가 만든 pkg 파일이다. 이 pkg 파일을 Cocos2d.pkg에서 로드하도록 파일을 수정한 다음 tolua++을 돌리면 되는 것이다. 내 MySprite.pkg 파일 내용은 다음과 같다.


class MySprite : public CCSprite {

static MySprite* create(const char* name);

};


pkg 파일을 작성하는 규칙은 다음과 같다. (tools/tolua++/README 파일에 적혀 있다.)


2. Writing .pkg files


    1) enum keeps the same

    2) remove CC_DLL for the class defines, pay attention to multi inherites

    3) remove inline keyword for declaration and implementation

    4) remove public protect and private

    5) remove the decalration of class member variable

    6) keep static keyword

    7) remove memeber functions that declared as private or protected 



3. 빌드한다.

빌드할 때는 먼저 tolua++/Cocos2d.pkg 파일을 수정해줘야 한다. 당연하지만 우리가 만든 커스텀 클래스를 추가해줘야 하지 않겠는가? 



이런 식으로 우리가 만든 클래스의 헤더 파일과 pkg 파일을 추가해주면 된다. 헤더 파일의 경로를 저렇게 썼어도 알아서 Classes 폴더를 뒤져서 만들어 준다.  

-- 수정사항 : 헤더파일을 위 사진과 같이 경로를 써놨더니 안드로이드 빌드를 할 때 에러가 나더라. 일단 '$#include "/Users/jungjuhong/Programming/game/cocos2dx/cocos2d-x-2.2.1/projects/testproj/Classes/MySprite.h"' 이렇게 절대경로를 쓰는 것으로 해결을 보긴 했는데, 뭔가 아름다운 방법은 아니라서 조금 더 연구를 해봐야 할 것 같다. 그리고 프로젝트의 Android.mk에 있는 LOCAL_SRC_FILES에다가 새로 추가한 소스의 cpp를 추가해줘야 한다. (../../Classes/MySprite.cpp 이런 식으로 말이다.) 

이제는 빌드를 할 차례. 윈도우에서 빌드할 때는 build.bat 파일을 실행하면 된다. 맥이나 리눅스에서 빌드할 때는 build.sh 파일을 커맨드 라인으로 실행해주면 된다. 그 전에 build.sh 파일을 조금 수정해줘야 한다. 




아마 처음에는 TOLUA 라는 값이 `which tolua++` 이런 식으로 쓰여 있을 것이다. tolua++ 경로를 설정해줘야 해서 이런 것이다. 침착하게 위 사진처럼 tools/tolua++/tolua++ 형식으로 값을 수정해주자. 그리고 커맨드라인에서 ./build.sh를 실행해주면 끝!




4. 확인해보기

이제 커스텀 클래스를 로드해서 잘 사용이 되는지 확인해보자. lua project의 소스를 수정해서 내 클래스를 만들어보면 될 것이다. 나 같은 경우에는 기본적으로 lua project를 만들면 있는 소스와 그림 파일을 이용했다.



잘 되는지 눈으로 직접 확인해보자! 끝!

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday