2016. 2. 19. 16:09ㆍKorean/개발백과사전
COCOS2dx + pugixml
오늘은 pugixml 사용방법에 대해서 간략하게 적어볼까합니다. 본 예제는 안드로이드 환경에서 Cocos2d로 개발을 진행할때 사용하였으며 개인에 따라 사용방법은 다를 수 있으니 그냥 참고만 하세요.
먼제 pugixml을 사용하기 위해서는 파일을 다운 받아야 합니다.
PUGIXML 다운로드 받는 곳 : http://pugixml.org/
pugixml-1.7.zip 요걸 다운 받습니다. 다운 받은 파일의 압축을 풀어보면 아래와 같이 나오는데요,
여기서 src 폴더로 이동합니다.
요기 있는 세 파일 이 전부 입니다.
요걸 사용하고자 하는 폴더로 복사해 주시면 일단 준비는 완료!!
복사하는 방법은 Ctrl + C 해서 본인의 프로젝트 소스파일에 Ctrl + V 해도 되구요
아니면 Visual Studio를 사용하고 있다면 아래와 같이 "Existing Item" 메뉴를 사용해도 무방합니다.
자 이제부터 어떻게 사용하는지 몇가지 예제를 적어보겠습니다.
// 우선 위 헤더파일을 Include 해 주구요,
#include "pugixml.hpp"
이러면 끝
그 담부터는 그냥 사용하시면 됩니다.
// xml 파일 생성 또는 로드는 아래처럼 하면 되구요
void XmlMngt::initGameData()
{
std::string path = CCFileUtils::sharedFileUtils()->getWritablePath();
path.append("data.xml");
if (!FileUtils::sharedFileUtils()->isFileExist(path))
{
auto data = FileUtils::getInstance()->getDataFromFile("data/data.xml");
std::string dbPath = FileUtils::getInstance()->getWritablePath() + "data.xml";
FILE* dest = fopen(dbPath.c_str(), "wb");
fwrite(data.getBytes(), 1, data.getSize(), dest);
fclose(dest);
}
unsigned char* pBuffer = NULL;
ssize_t bufferSize = 0;
pBuffer = CCFileUtils::sharedFileUtils()->getFileData(path.c_str(), "r", &bufferSize);
if (_xmlDoc.load_buffer(pBuffer, bufferSize))
_xmlNode = _xmlDoc.child("root");
}
저장하는 방법은 뭐 대충 요렇게
void XmlMngt::saveGameData()
{
std::string configPath = CCFileUtils::sharedFileUtils()->getWritablePath();
configPath.append("data.xml");
_xmlDoc.save_file(configPath.c_str());
}
//특정 데이터 불러오기는 요런식으로
void XmlMngt::getMyStat(MyStat &oStat)
{
pugi::xml_node it = _xmlNode.child("main");
oStat.Name = it.attribute("myname").value();
oStat.Money = it.attribute("money").as_llong();
oStat.GoldSpoon = it.attribute("goldspoon").as_int();
oStat.Level = it.attribute("level").as_int();
oStat.Stand = it.attribute("stand").value();
}
//데이터를 수정하고 저장할때는 이렇게 하면 되겠죠
void XmlMngt::setMyStat(const MyStat &iStat)
{
pugi::xml_node it = _xmlNode.child("main");
it.attribute("money").set_value(iStat.Money);
it.attribute("goldspoon").set_value(iStat.GoldSpoon);
it.attribute("myname").set_value(iStat.Name.c_str());
it.attribute("stand").set_value(iStat.Stand.c_str());
it.attribute("level").set_value(iStat.Level);
saveGameData();
}
제가 실제로 사용했던 코드를 같이 첨부합니다.
지우고 검색하고 이런 코드들도 있으니
조금이나마 도움이 되었으면 합니다.
---------------------------------------------------------------------------------------------------
물론 이렇게 안하고 더 효율적으로 하는 방법들이 있을 것입니다.
다만 처음 사용할때 참고용으로만 읽어주세요.
'Korean > 개발백과사전' 카테고리의 다른 글
Cocos2d에서 SingleTon 사용방법 및 소스코드 (0) | 2016.02.19 |
---|---|
전역 구조체 사용방법 및 소스코드 (0) | 2016.02.19 |
앱개발 안드로이드에서 문자 보내기 구현방법 (0) | 2016.02.19 |
앱개발 안드로이드에서 전화걸기 구현 방법 (0) | 2016.02.19 |
앱 개발시 유용한 무료 이미지 제공 사이트 모음 (0) | 2016.02.18 |