pugixml cocos2d-x
Cocos2Dx 2013. 10. 9. 18:32 |cocos2d-x에서 xml parser를 사용하려고 이것저것 찾아봤는데, 소스코드 내에서 CCSAXParser라는 것을 발견하였지만 어떻게 사용하는지 몰라서 포기! 결국 찾다 찾다 pugixml이 가장 나은 것 같아서 이를 사용하게 되었다.
http://www.cocos2d-x.org/boards/6/topics/11313
위 주소를 참고해서 사용하게 되었는데~
우선 그냥 pugixml을 사용해서 cygwin을 이용해 빌드하면 에러가 난다!(ndk-r8 기준)
에러인 즉슨 g++ 컴파일러를 기본옵션으로 돌릴 때 throw 를 지원하지 않기 때문인듯 하다.
에러 내용은 무슨 -fexception 명령옵션을 사용해서 throw를 멈춰라.. 뭐 이런거였는데..
해결은 pugixml.cpp의 최 상단의 헤더 선언부 바로 아래에 PUGIXML_NO_EXCEPTIONS를 define해줬다.
즉, #define PUGIXML_NO_EXCEPTIONS 만 선언해 주면 끝.
내용을 보니까 PUGIXML_NO_EXCEPTIONS가 ifdef돼있는 경우 exception을 사용하지 않게 돼있더라~
그리고..
win32환경의 cocos2d-x에서는 load_file로도 xml이 잘 읽히지만, 문제는 android환경에서 돌릴때 이다.
assets에 있는 png나 jpg는 잘 읽으면서 그 외의 리소스는 잘 못 읽더라.
xml을 읽게 하기 위해서는 load_file이 아니고 다른걸 써야 하더라! 이 역시 위의 블로그를 참조했다.
길게 설명하면 귀찮으니 소스 한방으로 끝내자면...
안드로이드는 APK로 압축이 되어서 fopen 을 이용하는 함수가 제대로 안 먹힙니다.
C++에서는 boost::serialization을 쓰는게 편한것을 알았고.. C#에서는 XML로 바로 serialization이 되기에 문제가 없지만..
그러면 cocos2d-x에서 파일저장을 위해 그 큰 boost::serialization을 쓸수 없진 않은가?
결국 XML 을 쓰긴 써야하는데 뒤져보니 아래와 같은 글에서 pugixml 을 사용하고 있당.. 쉬운것 같당...헤헤
http://roter.tistory.com/archive/20120717
괜히 tutorial 적당히 읽어보고 바꾸다가 삽질을 더 했지만,
어렵게 static 만들 필요 없이...
pugiconfig.hpp 에서
#define PUGIXML_NO_EXCEPTIONS // cygwin의 빌드를 위해서..
#define PUGIXML_HEADER_ONLY
#include "pugixml.cpp"
이것만 주석해제하고..
android.mk에서
LOCAL_CPPFLAGS += -fexceptions
한줄 추가했지롱
자 다음 문제는....
pugixml 의 예제대로 loadXML, SaveXML을 사용하면.. 안드로이드 기계에서는 경로를 제대로 못찾아 에러가 납니다...
1. 내가 저장하는 것이나 내가 런타임에서 저장한 파일 불러오려면
안드로이드 기계에서 저장가능한 경로를 찾아야 하므로
pugi::xml_document doc2;
doc2.load("<mesh name='Save_HwangJe'/>");
std::string filePath = CCFileUtils::sharedFileUtils()->getWriteablePath();
filePath.append("save_file_output.xml");
이런식으로 getWriteablePath를 불러준다..
2. 리소스폴더에 이미 저장된거 불러올 경우
리소스폴더에서 불러오는 경로는 아래와 같이 이미 스프라이트 로드할때부터 사용
std::string fullPath = CCFileUtils::sharedFileUtils()->fullPathFromRelativePath("XML/save_file_output.xml");
이러면 Resource/Xml/save_file_output.xml 불러온데이
'Cocos2Dx' 카테고리의 다른 글
cocos2d-x 빌드 오류 해결 (0) | 2013.11.14 |
---|---|
CCScrollView 사용법 (0) | 2013.08.10 |
(cocos2d-x) 하위 노드 터치 불가 만들기 및 복구하기 (0) | 2013.06.25 |
Sprite 텍스처 교체 (0) | 2013.06.06 |
cocos2dx android 프로젝트 생성 시 오류 해결 법. (0) | 2013.06.01 |