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

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

        分类:            coco2d-x 236人阅读 评论(0) 收藏 举报

之前一直都是用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;
}

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




这样在以后的编程中直接使用这个类就好了,希望能对大家有所帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值