您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-x 中文显示问题的解决方案 (自己封装一个类一次编写终身无忧)

2013-11-17 15:17 183 查看

之前一直都是用XML文件来解决中文显示问题。。。。

不过xml文件解决中文问题有个致命的缺陷,就是不能按照自己的意愿动态显示需要的内容。。

(比如我们在做棋牌游戏中需要动态显示 ,豹子,对子,散牌等)这样就不利于中文显示的函数封装;所以这种方法应该摒弃!!

所以我决定自己封转一个类用于中文的转码 (支持gbk 和 UTF-8);

下面我来写一下着了类的实现过程

#pragma once

#pragma comment(lib, "libiconv.lib") //加入转码库(这个是必须要加的)

#include "cocos2d.h"

#include "iconv\iconv.h" //包含具体的转码头文件 (这个也是)

class TransToC //自定义转码类

{

public:

TransToC(void);

~TransToC(void);

//声明转码函数

int GBKToUTF8(std::string & gbkStr, const char* toCode, const char* fromCode);

//声明使用转码过程(这里定义成节点类型返回这个节点,大家需要做的只是this->addChild(该节点))

cocos2d::CCNode* createChineseLabel(std::string str ,int fontsize ,int x,int y); //这几个参数分别代表 : 中文内容,字体 ,和要在场景中显示的坐标

};

//在cpp文件中这样定义
#include "TransToC.h"

USING_NS_CC;

TransToC::TransToC(void)

{

}

TransToC::~TransToC(void)

{

}

int TransToC::GBKToUTF8(std::string & gbkStr, const char* toCode, const char* fromCode)

{

iconv_t iconvH;

iconvH = iconv_open(fromCode, toCode);

if (iconvH == 0)

{

return -1;

}

const char* strChar = gbkStr.c_str();

const char** pin = &strChar;

size_t strLength = gbkStr.length();

char* outbuf = (char*) malloc(strLength*4);

char* pBuff = outbuf;

memset( outbuf, 0, strLength*4);

size_t outLength = strLength*4;

if (-1 == iconv(iconvH, pin, &strLength, &outbuf, &outLength))

{

iconv_close(iconvH);

return -1;

}

gbkStr = pBuff;

iconv_close(iconvH);

return 0;

}

CCNode* TransToC::createChineseLabel(std::string str ,int fontsize ,int x,int y)

{

GBKToUTF8(str,"gbk","utf-8");

CCLabelTTF* pLabel2 = CCLabelTTF::create(str.c_str(),"Marker Felt",fontsize);

pLabel2->setPosition(ccp(x, y));

return pLabel2;

}

//大家只需要在相应的游戏层中接受这个返回值就行了,还是给个实例吧;





这样在以后的编程中直接使用这个类就好了,希望能对大家有所帮助!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: