初学Cocos就遇到了中文的显示问题,在使用cclabelTTF调用系统字体时,出现的是乱码;使用cclabelBMFont调用自己设计的fnt文件时,就会什么都不显示。百度了很久之后才明白,字体文件需要的中文得是UTF-8编码的,而项目又是Unicode,所以我们只需要把中文字符串的Unicode编码转化为UTF-8就行了。
Unicode转UTF-8函数:
char* EncodetoUTF8(const char* mbcsstr){ wchar_t* wIDeStr; char* utf8Str; int charLen; charLen = MultiBytetoWIDeChar(@H_404_18@936,@H_404_18@0,mbcsstr,-@H_404_18@1,NulL,@H_404_18@0); wIDeStr = (wchar_t*)malloc(sizeof(wchar_t)*charLen); MultiBytetoWIDeChar(@H_404_18@936,wIDeStr,charLen); charLen = WIDeCharToMultiByte(CP_UTF8,NulL); utf8Str = (char*)malloc(charLen); WIDeCharToMultiByte(CP_UTF8,utf8Str,charLen,NulL); free(wIDeStr); return utf8Str;}
使用示例:
cclabelTTF* pLabel = cclabelTTF::create(EncodetoUTF8("海贼王"),"Marker Felt",@H_404_18@24); cclabelBMFont* label = cclabelBMFont::create(EncodetoUTF8("海贼王"),"Fonts/_chapter7.fnt",@H_404_18@24); // position the label on the center of the screen pLabel->setposition(ccp(origin.x + visibleSize.wIDth/@H_404_18@2 -@H_404_18@100,origin.y + visibleSize.height - pLabel->getContentSize().height)); label->setposition(ccp(origin.x + visibleSize.wIDth / @H_404_18@2 + @H_404_18@100,origin.y + visibleSize.height - label->getContentSize().height)); // add the label as a child to this layer this->addChild(pLabel,@H_404_18@1); this->addChild(label,@H_404_18@1);
效果图:
以上是内存溢出为你收集整理的【Cocos2d-X】中文乱码问题全部内容,希望文章能够帮你解决【Cocos2d-X】中文乱码问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)