cocos2d-x 2.2版本下实现随机姓名产生

前言:手机网游总会让玩家自己输入个角色名,想偷懒的话,加个姓名随机产生角色名也挺不错的~~~

环境: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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值