【转载】cocos2d-x 2.1下使用CCLabelTTF显示汉字的问题
http://blog.itpub.net/14466241/viewspace-752027/ 作者:朱先忠
本文结合自己的学习结果,并主要参考如下内容形成: 接下来要介绍的是使用CCLabelTTF显示汉字的问题。这种方案速度更快,在Android及Win32平台上显示汉字自然也没有问题。相关技术主要来自于: http://blog.csdn.net/tkokof1/article/details/7426706 我只是稍微整理了一下而已。 方案一:使用cocos2d-x自带的iconv库(在WIN32下),还要下载一个。需要: 1,在你的工程中添加对头文件cocos2dxplatformthird_partywin32iconviconv.h的引用。 2,相应的库引用:cocos2dxplatformthird_partywin32librarieslibiconv.lib。 代码如下:(先写两个工具函数) bool IConvConvert(const char *from_charset,const char *to_charset,const char *inbuf,int inlen,char *outbuf,int outlen) { iconv_t cd = iconv_open(to_charset,from_charset); if (cd == 0) return false; const char **pin = &inbuf; char **pout = &outbuf; memset(outbuf,outlen); size_t ret = iconv(cd,pin,(size_t *)&inlen,pout,(size_t *)&outlen); iconv_close(cd); return ret == (size_t)(-1) ? false : true; } std::string IConvConvert_GBKToUTF8(const std::string& str) const char* textIn = str.c_str(); char textOut[256]; bool ret = IConvConvert("gb2312","utf-8",textIn,strlen(textIn),textOut,256); return ret ? string(textOut) : string(); 使用方法简单: std::string text = IConvConvert_GBKToUTF8("你好世界"); CCLabelTTF* pLblChinese = CCLabelTTF::create(text.c_str(),"Arial",24); 但是,遗憾的是, cocos2d-x 仅自带了适合于WIN32的 iconv 库,对于其中平台的没有带。 不过,不要紧,上面提到的iconv库可以轻松搞到。具体细节在http://bbs.csdn.net/topics/390285784上有介绍。我把它摘要在此:
方案二:结合上面原理,自己开发(极力推荐) //!convertfromwstringtoUTF8usingself-coding-converting inlinevoidWStrToUTF8(std::string&dest,constwstring&src){ dest.clear(); for(size_ti=0;i<src.size();i++){ wchar_tw=src[i]; if(w<=0x7f) dest.push_back((char)w); elseif(w<=0x7ff){ dest.push_back(0xc0|((w>>6)&0x1f)); dest.push_back(0x80|(w&0x3f)); } elseif(w<=0xffff){ dest.push_back(0xe0|((w>>12)&0x0f)); dest.push_back(0x80|((w>>6)&0x3f)); elseif(sizeof(wchar_t)>2&&w<=0x10ffff){ dest.push_back(0xf0|((w>>18)&0x07));//wchar_t4-bytessituation dest.push_back(0x80|((w>>12)&0x3f)); else dest.push_back('?'); //!simplewarpper inlinestd::stringWStrToUTF8(conststd::wstring&str){ std::stringresult; WStrToUTF8(result,str); returnresult; //addalabelshows"HelloWorld" //createandinitializealabel std::stringtext=WStrToUTF8(L"你好世界"); CCLabelTTF*pLabel=CCLabelTTF::labelWithString(text.c_str(),24); 总结 上面几种方案我都试验过了,OK。 剩下还有一个问题就是,使用CCLabelTTF显示中文时,如何使用自定义字体的问题了。以后再讨论................ --the end
因为需要修改一个RichText,所以再次找到了显示中文的问题。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |