cocos2d-x中中文显示问题解决方法一
2012-11-09 20:12
375 查看
原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和本声明。否则将追究法律责任。
/article/8218514.html
在VS上使用cocos2d-x开发,中文显示会出问题。下面是解决的方法一(通过xml配置文件来读取中文)
------------------------------------------------代码部分----------------------------------------------------------
(1)stringsScript.xml(配置文件,自己写配置文件时就按照下面的格式来,调用时通过userName)
(2)Singleton.h
(3)HXmlParse.h
(4)HXmlParse.cpp
(5)XMLConfig.h
(6)XMLConfig.cpp
(7)调用部分(包含包含的头文件)
/article/8218514.html
在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()/*:isJumpHeadData(false)*/{} 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()); }
(5)XMLConfig.h
#ifndef _XMLCONFIG_H_ #define _XMLCONFIG_H_ #include "HXmlParse.h" #include "Singleton.h" #include <map> using namespace std; class XMLConfig : public HXmlParse, public Singleton<XMLConfig> { public: XMLConfig(); ~XMLConfig(); bool Load(); char* GetStringForKey(const char* sKey) const; bool SetStringForKey(const char* sKey, std::string value); private: HXmlParse* m_pParse; }; #endif // _XMLCONFIG_H_
(6)XMLConfig.cpp
#include "XMLConfig.h" XMLConfig::XMLConfig() :m_pParse(NULL) { } XMLConfig::~XMLConfig() { m_pParse->release(); m_pParse = NULL; } char* XMLConfig::GetStringForKey(const char* sKey) const { //const_iterator常量迭代器,不得修改 map<std::string, std::string>::const_iterator it = m_pParse->m_mapText.find(sKey); if (it != m_pParse->m_mapText.end()) return (char*)it->second.c_str(); return NULL; } bool XMLConfig::SetStringForKey(const char* sKey, std::string value) { map<std::string, std::string>::iterator it = m_pParse->m_mapText.find(sKey); if ( it != m_pParse->m_mapText.end()) { it->second = value; return true; } else { it->second = ""; return false; } } bool XMLConfig::Load() { m_pParse = parserWithFile("stringsScript.xml"); return true; }
(7)调用部分(包含包含的头文件)
#include "XMLConfig.h" //通过xml配置来读取中文 XMLConfig::getInstance()->Load(); char * userName=XMLConfig::getInstance()->GetStringForKey("userName"); CCLabelTTF * chineseLabel = CCLabelTTF::create(userName,"Thonburi",25); chineseLabel->setAnchorPoint(CCPointZero); chineseLabel->setPosition(ccp(300, 600)); this->addChild(chineseLabel,2);
相关文章推荐
- cocos2d-x中文显示问题解决方法(使用cocos2dx中自带的iconv实现)
- cocos2d-x中中文显示问题解决方法二
- cocos2d-x中文显示问题解决方法(使用cocos2dx中自带的iconv实现)
- cocos2d中文显示问题的解决方法
- Cocos2d-x初入学堂(7)-->win32显示中文乱码解决方法
- SQLServer乱码问题的分析及解决方法(中文字符被存入数据库后,显示为乱码)
- [Cocos2D-X]使用iconv解决VS上中文显示乱码的问题+android导入第三方库iconv
- Fedora 18 vim编辑器中文字符显示乱码问题的解决方法
- JBuilderX中文显示和光标问题的解决方法
- Cocos2D 0.99.5的template提示安装好了,打开xcode却不显示的问题的解决方法
- jasperreports和Ireport导出PDF文件中文不显示问题(最新解决方法)
- php 中文字符入库或显示乱码问题的解决方法
- j2ee由于tomcat配置问题显示中文乱码的解决方法
- 某些开发版中的Qt Designer菜单等中文显示为乱码问题解决方法初探
- vim中文显示问题解决方法
- wordpress mu无法显示中文问题的解决方法
- 解决Linux下Flash视频网站的动态中文显示方块问题方法
- 利用jasperreports报表生成pdf文档中文不能显示问题解决方法
- ubuntu14.04下MYSQL显示中文乱码问题解决方法
- DOS命令行窗口mysql中文显示乱码问题解决方法