文档章节

Cocos2d-x标签文乱码问题

智捷课堂
 智捷课堂
发布于 2014/05/11 10:03
字数 911
阅读 263
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

我们在Windows下使用Visual Studio 2012开发游戏的时候,使用标签中包含中文时候会出现乱码或无法显示,如下图所示:


而应该显示的中文是如下图所示:



HelloWorldScene.cppinit函数如下:

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片

  1. bool HelloWorld::init()  

  2. {  

  3.     if( !Layer::init() )  

  4.     {  

  5.          return false;  

  6.     }  

  7.    

  8.     SizevisibleSize = Director::getInstance()->getVisibleSize();  

  9.     Pointorigin = Director::getInstance()->getVisibleOrigin();  

  10.     autocloseItem = MenuItemImage::create(  

  11.          "CloseNormal.png",  

  12.          "CloseSelected.png",  

  13.          CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));  

  14.    

  15.     closeItem->setPosition(Point(origin.x+ visibleSize.width - closeItem->getContentSize().width/2 ,  

  16.          origin.y +closeItem->getContentSize().height/2));  

  17.    

  18.    

  19.     automenu = Menu::create(closeItem, NULL);  

  20.     menu->setPosition(Point::ZERO);  

  21.     this->addChild(menu,1);  

  22.    

  23.     autolabel1 = LabelTTF::create("中国1","Arial", 30);                                                                     ①  

  24.     label1->setPosition(Point(origin.x+ visibleSize.width/2,  

  25.          origin.y + visibleSize.height - 150));  

  26.     this->addChild(label1,1);  

  27.    

  28.     autolabel2 = LabelBMFont::create("中国2","fonts/bitmapFontChinese.fnt");                             ②  

  29.     label2->setPosition(Point(origin.x+ visibleSize.width/2,  

  30.          origin.y + visibleSize.height - 250));  

  31.     this->addChild(label2,1);  

  32.    

  33.     autolabel3 = Label::createWithBMFont("fonts/bitmapFontChinese.fnt","中国3");                     ③  

  34.     label3->setPosition(Point(origin.x+ visibleSize.width/2,  

  35.          origin.y + visibleSize.height - 350));  

  36.     this->addChild(label3,1);  

  37.    

  38.     TTFConfigttfConfig("fonts/STLITI.ttf", 36,GlyphCollection::DYNAMIC);                                   ④  

  39.     autolabe4 = Label::createWithTTF(ttfConfig,"您好.",  

  40.                                      TextHAlignment::CENTER,  

  41.                                      visibleSize.width);                                              ⑤  

  42.     labe4->setPosition(Point(origin.x+ visibleSize.width/2,  

  43.          origin.y + visibleSize.height - 450));  

  44.     this->addChild(labe4,1);  

  45.    

  46.     returntrue;  

  47. }  


上述代码第①行是创建一个LabelTTF标签对象,其中包括中文字符。类似的第⑤行代码是Label::createWithTTF创建一个Label标签对象。它们都需要指定字体问题,为了显示中文,需要字体库文件支持中文,其中第④行代码STLITI.ttf字体库是华文隶书。

第②行代码是通过LabelBMFont::create创建位图字体标签。第③行代码是通过Label::createWithBMFont创建位图字体标签。

出现乱码或无法显示的原因是由于在Windows中文环境下使用Visual Studio创建的源程序文件是采用GBK编码。解决方法很简单,我们只需要把HelloWorldScene.cpp文件另存为UTF-8就可以了,用记事本等文本编辑工具打然后另存为UTF-8就可以,或者是在Visual Studio工具中可以选择菜单文件高级保存选项,在弹出如下图所示对话框,选择编码为Unicode(UTF-8无签名),然后点击确定按钮保存。


注意不能保存为Unicode(UTF-8带签名)。而采用Unicode(UTF-8无签名)的文件在程序编译的时候,第行代码Label::createWithTTF中如果包含中文,有的时候会有如下编译错误:

2>helloworldscene.cpp(58): errorC2001:常量中有换行符

2>helloworldscene.cpp(59): errorC2143:语法错误 :缺少“)(在“CENTER”的前面)

2>helloworldscene.cpp(60): errorC2059:语法错误:)

这是由于Visual Studio对于Unicode(UTF-8无签名)识别有误,我们一般在后面添加一些英文字符,或者“啊”等特殊的中文字符。

[html] view plaincopy在CODE上查看代码片派生到我的代码片

  1.     autolabe4 = Label::createWithTTF(ttfConfig,"您好,美好的一天",                                     ①  

  2.                                       TextHAlignment::CENTER,  

  3.                                      visibleSize.width);  

  4.    

  5.     autolabe4 = Label::createWithTTF(ttfConfig,"您好,美好的一天啊",                                           ②  

  6.                                      TextHAlignment::CENTER,  

  7.                                       visibleSize.width);  

  8.    

  9. autolabe4 = Label::createWithTTF(ttfConfig,"您好,美好的一天.",                                                 ③  

  10.                                      TextHAlignment::CENTER,  

  11.                                      visibleSize.width);  


在上面的中文第①行代码在Visual Studio下无法编译,第②行代码可以字符串后面追加“啊”编译通过,并且能够正常显示。第③行代码我们在中文字符后面追加“.(英语句号),编译通过,但是“天”字不能显示。而在AndroidiOS平台,如果如果也采用UTF-8,那么上面的问题就不会出现,能够编译和正常显示。

 

使用菜单

菜单中又包含了菜单项,菜单项类是MenuItem,每个菜单项都有三个基本状态:正常、选种和禁止。我们再回顾一下MenuItem类图如下图所示。


菜单分类是按照菜单项进行分类的,从MenuItem类图中可见MenuItem的派生类有:MenuItemLabelMenuItemSpriteMenuItemToggle。其中MenuItemLabel类是文本菜单,它有两派生类MenuItemAtlasFontMenuItemFontMenuItemSprite类是精灵菜单,它的派生类是MenuItemImage,它是图片菜单,MenuItemToggle类是开关菜单。


智捷课堂

智捷课堂

粉丝 40
博文 239
码字总数 215495
作品 0
东城
私信 提问
加载中
请先登录后再评论。
程序猿媛一:Android滑动翻页+区域点击事件

滑动翻页+区域点击事件 ViewPager+GrideView 声明:博文为原创,文章内容为,效果展示,思路阐述,及代码片段。文尾附注源码获取途径。 转载请保留原文出处“http://my.oschina.net/gluoyer...

花佟林雨月
2013/11/09
4.1K
1
基于 ThinkPHP 的内容管理系统--歪酷CMS

歪酷网站管理系统(歪酷CMS)是一款基于THINKPHP框架开发的PHP+MYSQL网站建站程序,本程序实现了文章和栏目的批量动态管理,支持栏目无限分类,实现多管理员管理,程序辅助功能也基本实现了常见的文...

鲁大在线
2013/02/19
6.8K
1
OpenConnect VPN 服务器--ocserv

ocserv 全称是 OpenConnect VPN Server。实现了 AnyConnect SSL VPN 协议,兼容 OpenConnection VPN 客户端。特点是体积小、安全和可配置。依赖标准协议如 TLS 1.2 和数据报文 TLS。...

匿名
2013/03/06
8.7K
0
磁盘空间统计工具--Disk Inventory X

Disk Inventory X 是运行于 Mac OS X 10.3 (及以上)的磁盘空间统计工具。它通过 "treemaps" 的特殊方式显示了文件及文件夹的占用空间情况。 如果你经常想知道你的磁盘空间都被什么文件占用的...

匿名
2012/11/13
1.2K
0
SAE/CloudFoundry 个人独立博客--Blog4j

Blog4j是一个用Java实现的, 简洁的, 高效的个人独立博客. 没有使用臃肿的SSH流, 但自己构建了一个简洁高效的替代者--Run框架, 使博客运行达到最高性能, 最低耗能! 特点: 文章分类基于标签形式...

xwz
2012/12/14
9.6K
5

没有更多内容

加载失败,请刷新页面

加载更多

在新标签页(而不是新窗口)中打开URL - Open a URL in a new tab (and not a new window)

问题: I'm trying to open a URL in a new tab, as opposed to a popup window. 我正在尝试在新选项卡(而不是弹出窗口)中打开URL 。 I've seen related questions where the responses wo......

富含淀粉
34分钟前
17
0
HTML中id属性的有效值是什么? - What are valid values for the id attribute in HTML?

问题: 为HTML元素创建id属性时,该值有哪些规则? 解决方案: 参考一: https://stackoom.com/question/IMN/HTML中id属性的有效值是什么 参考二: https://oldbug.net/q/IMN/What-are-vali...

法国红酒甜
今天
25
0
mysql innodb 可重复 幻读问题

1 mvcc 解决快照读幻读 2 GAP 锁解决 当前读幻读 (insert时 插入意向锁会等待GAP锁)

yzzzzzzzz
今天
25
0
画风清奇,用开源机器人项目实现“云毕业典礼”

本文作者:o****0 前几天,南京邮电大学的一场毕业典礼引起了吃瓜群众的热议,先来看看这个画风: 由于疫情原因,很多高校的学生只能在家里通过线上视频的方式完成毕业论文答辩。答辩通过后,...

百度开发者中心
07/31
16
0
2020年TOP7的编程语言和框架,它们至少还能风靡全球5年以上

在本文中,我们将看一看由我推荐的编程语言和框架列表,我相信在接下来的5年至10年中,对于开发者来说,这份列表中的语言和框架仍然会有用。同时考虑到我不希望该列表仅是另一个备受好评的编...

京东智联云开发者
今天
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部