cocos2d-x 中文显示问题的解决方案 (自己封装一个类一次编写终身无忧)
来源:互联网 发布:iphone照片直接导入mac 编辑:程序博客网 时间:2024/05/18 00:54
之前一直都是用XML文件来解决中文显示问题。。。。
不过xml文件解决中文问题有个致命的缺陷,就是不能按照自己的意愿动态显示需要的内容。。
(比如我们在做棋牌游戏中需要动态显示 ,豹子,对子,散牌等)这样就不利于中文显示的函数封装;所以这种方法应该摒弃!!
所以我决定自己封转一个类用于中文的转码 (支持gbk 和 UTF-8);
下面我来写一下着了类的实现过程
#pragma once
#pragma comment(lib, "libiconv.lib") //加入转码库(这个是必须要加的)
#include "cocos2d.h"
#include "iconv\iconv.h" //包含具体的转码头文件 (这个也是)
#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;
}
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;
}
//大家只需要在相应的游戏层中接受这个返回值就行了,还是给个实例吧;
这样在以后的编程中直接使用这个类就好了,希望能对大家有所帮助!
- cocos2d-x 中文显示问题的解决方案 (自己封装一个类一次编写终身无忧)
- [置顶]cocos2d-x 中文显示问题的解决方案 (自己封装一个类一次编写终身无忧)
- cocos2d-x自己封装的一个 等待的控件 TTWaitting
- cocos2d-x中文显示问题
- cocos2d-x中文显示问题
- cocos2d-x中文显示问题
- cocos2d-x中文显示问题
- 【ArcGis】环境搭建,一次配置,终身无忧
- Cocos2d-x里面的HelloCpp项目不显示文字(或中文出现乱码)--解决方案
- cocos2d-x的中文显示
- cocos2d-x基础学习--编写自己的精灵类
- cocos2d-x wp8 中文显示问题
- Cocos2d-x 分享一个封装的Sqlite3的DBUtil类
- Cocos2d-x分享一个封装的Sqlite3的DBUtil类
- Cocos2d-x 分享一个封装的Sqlite3的DBUtil类
- cocos2d-x显示中文
- Cocos2d-x--中文显示
- cocos2d-x 中文显示
- 商品管理系统Debug札记
- mipsel-linux-uclibc交叉编译libz
- Interacting with the Runtime
- The Ruby On Rials Gudie -- Active Record Query Interface
- CentOS:安装libvmi和libvirt
- cocos2d-x 中文显示问题的解决方案 (自己封装一个类一次编写终身无忧)
- 跨交换机VLAN及VLAN之间通信
- win732位安装,卸载oracle10g,备份还原方案
- 电脑上同时装IIS和Apache 出现问题怎么办
- php 不等待返回的实现方法(异步调用)
- 使用PHP进行异步HTTP请求
- 嵌入式经典面试题---C中有关预处理,关键字const、volatile、static,位操作,等等
- c++学习之--关于程序编译
- ucos 计数信号量