前言:手机网游总会让玩家自己输入个角色名,想偷懒的话,加个姓名随机产生角色名也挺不错的~~~
环境:mac Xcode5.0 cocos2d-x 2.2
首先准备一个XML文件
如下图所示就行啦
然后将它解析出来
分别放入
// 玩家firstName
vector<std::string> m_firstNameVec;
// 玩家名称
vector<std::string> m_nameVec;
最后随机获取姓 和 名 就OK拉
// 初始化随机名字表
void HelloWorld::initRandomNameTable()
{
//读取xml表信息
XmlParser* myXml = XmlParser::parserWithFile("name.xml");
string str = myXml->m_xmlMap["ChineseFirstName"];
m_firstNameVec = StringUtil::split(str, "|");
str = myXml->m_xmlMap["ChineseSecondName"];
m_nameVec = StringUtil::split(str, "|");
}
// 点击按钮回调
void HelloWorld::onClicBtnCallback(CCObject* pSender)
{
//读表
string firstName = m_firstNameVec[rand() % m_firstNameVec.size()];
firstName += m_nameVec[rand() % m_nameVec.size()];
// 设置随机姓名
m_name->setString(firstName.c_str());
}
下面是一个cocos2d-x解析XML的类
头文件
#include "cocos2d.h"
using namespace cocos2d;
using namespace std;
class XmlParser:public CCSAXDelegator,public CCObject
{
public:
XmlParser();
~XmlParser();
static XmlParser* parserWithFile(const char* tmxFile);
bool initXmlParser(const char* tmxFile);
public:
//覆盖纯虚函数
virtual void startElement(void *ctx, const char *name, const char **atts);//开始标签
virtual void endElement(void *ctx, const char *name); //标签结束
virtual void textHandler(void *ctx, const char *s, int len); //标签的内容
public:
map<std::string, std::string> m_xmlMap;
private:
string m_rootName;
bool m_isJumpHeadData;
//用来记录每个key前字段
string m_startElement;
//用来记录每个key后字段
string m_endElement;
};
cpp:
#include "XmlParser.h"
XmlParser::XmlParser()
{
m_isJumpHeadData = false;
}
XmlParser::~XmlParser()
{
}
XmlParser* XmlParser::parserWithFile(const char *tmxFile)
{
XmlParser* pRet = new XmlParser();
if(pRet && pRet->initXmlParser(tmxFile))
{
pRet->autorelease();
return pRet;
}
CC_SAFE_DELETE(pRet);
return NULL;
}
bool XmlParser::initXmlParser(const char *tmxFile)
{
m_xmlMap.clear();
CCSAXParser parser; //定义解析
if(!parser.init("UTF-8")) //不是utf-8就不解析了
{
return false;
}
parser.setDelegator(this); //设置解析的对象,这样就会调用解析的方法
string fullPath = CCFileUtils::sharedFileUtils()->fullPathForFilename(tmxFile);
return parser.parse(fullPath.c_str());
}
void XmlParser::startElement(void *ctx, const char *name, const char **atts)
{
CC_UNUSED_PARAM(ctx);
m_startElement = (char*)name;
if(!m_isJumpHeadData) //跳过数据头
{
m_isJumpHeadData = true;
m_rootName = m_startElement;
return;
}
}
void XmlParser::textHandler(void *ctx, const char *s, int len)
{
CC_UNUSED_PARAM(ctx);
std::string curStr = std::string((char*)s, 0, len);
if(m_rootName != "")
{
m_xmlMap[m_startElement] += curStr;
}
}
void XmlParser::endElement(void *ctx, const char *name)
{
CC_UNUSED_PARAM(ctx);
m_endElement = (char*)name;
if(m_endElement == m_rootName) //数据尾
{
m_isJumpHeadData = false;
m_rootName = "";
return;
}
}
最后附上效果截图以及工程下载地址
下载地址:http://download.csdn.net/detail/liying426/7010175