永发信息网

如何在Cocos2d-x中显示中文

答案:1  悬赏:0  手机版
解决时间 2021-04-07 18:12
  • 提问者网友:愿为果
  • 2021-04-07 12:22
如何在Cocos2d-x中显示中文
最佳答案
  • 五星知识达人网友:摆渡翁
  • 2021-04-07 13:42
在VS上使用cocos2d-x开发,中文显示会出问题。下面是解决的方法一(通过xml配置文件来读取中文)

------------------------------------------------代码部分----------------------------------------------------------
(1)stringsScript.xml(配置文件,自己写配置文件时就按照下面的格式来,调用时通过userName)
<?xml version="1.0" encoding="utf-8"?>
<stringsScriptRoot>
<userName>用户名:</userName>
</stringsScriptRoot>
(2)Singleton.h
#ifndef __SINGLETON_H__
#define __SINGLETON_H__

template <typename T>
class Singleton
{
public:
inline static T* getInstance();
inline static void release();
private:
static T* t;
};

template <typename T>
inline T* Singleton<T>::getInstance()
{
if (!t)
{
t = new T;
}
return t;
}

template<typename T>
inline void Singleton<T>::release()
{
if (t)
{
delete t;
t = 0;
}
}

template <typename T>
T* Singleton<T>::t = 0;

#endif // __SINGLE_H__
(3)HXmlParse.h
#ifndef HAnimation_HXmlParse_h
#define HAnimation_HXmlParse_h

#include "cocos2d.h"
using namespace cocos2d;

#include <map>
using namespace std;

class HXmlParse : public CCObject, public CCSAXDelegator
{
public:
HXmlParse(){}

static HXmlParse* parserWithFile(const char *tmxFile);

bool initHXmlParse(const char* xmlName);

// 使用 CCSAXDelegator 重写3个回调函数
void startElement(void *ctx, const char *name, const char **atts);

void endElement(void *ctx, const char *name);

void textHandler(void *ctx, const char *ch, int len);

std::string root_name;

//bool isJumpHeadData;

//CCMutableDictionary<std::string,CCString*> *mDic;
map<std::string, std::string> m_mapText;

private:

std::string startXmlElement;//用来记录每个key前字段

std::string endXmlElement;//用来记录每个key后字段

std::string currString;//记录每个value的值
};

#endif
(4)HXmlParse.cpp
#include "HXmlParse.h"
#include "cocos2d.h"

HXmlParse* HXmlParse::parserWithFile(const char *tmxFile)
{
HXmlParse *pRet = new HXmlParse();
if(pRet->initHXmlParse(tmxFile))
{
//pRet->autorelease();
return pRet;
}
CC_SAFE_DELETE(pRet);
return NULL;
}

bool HXmlParse::initHXmlParse(const char* xmlName)
{
//mDic = new CCMutableDictionary<std::string,CCString*>();

CCSAXParser _par;

if (false == _par.init("UTF-8") )
{
//CCLog("-----请使用utf-8格式!");
return false;
}
_par.setDelegator(this);
const char* _path = CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(xmlName);
return _par.parse(_path);
}

//回调函数
void HXmlParse::startElement(void *ctx, const char *name, const char **atts)
{
CC_UNUSED_PARAM(ctx);

startXmlElement = (char*)name;

//if(!isJumpHeadData)
{
//跳过数据头
//CCLog("------跳过root name");
//isJumpHeadData=true;

root_name=startXmlElement;
}

// CCLog("-startElement----%s",startXmlElement.c_str());
}

void HXmlParse::endElement(void *ctx, const char *name)
{
CC_UNUSED_PARAM(ctx);

endXmlElement = (char*)name;

if(endXmlElement==root_name)
{
//数据尾
//CCLog("读取xml结束");
//isJumpHeadData=false;

root_name="";
}

// CCLog("-endElement----%s",endXmlElement.c_str());
}

//键值对的结束字段
void HXmlParse::textHandler(void *ctx, const char *ch, int len)
{
CC_UNUSED_PARAM(ctx);

currString=string((char*)ch,0,len);
CCString *ccStr =new CCString();//备注3
ccStr->m_sString=currString;
if(root_name!="")
{
//mDic->setObject(ccStr,startXmlElement);
m_mapText[startXmlElement] = ccStr->getCString();
//CCLog("-----key:%s, value:%s",startXmlElement.c_str(),mDic->objectForKey(startXmlElement)->m_sString.c_str());
}

// CCLog("-textHandler----%s",currString.c_str());
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯