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

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

HelloWorldScene.cpp中init函数如下:

  1. bool HelloWorld::init()
  2. {
  3. if( !Layer::init() )
  4. {
  5. return false;
  6. }
  7. SizevisibleSize = Director::getInstance()->getVisibleSize();
  8. Pointorigin = Director::getInstance()->getVisibleOrigin();
  9. autocloseItem = MenuItemImage::create(
  10. "CloseNormal.png",
  11. "CloseSelected.png",
  12. CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));
  13. closeItem->setPosition(Point(origin.x+ visibleSize.width - closeItem->getContentSize().width/2 ,
  14. origin.y +closeItem->getContentSize().height/2));
  15. automenu = Menu::create(closeItem, NULL);
  16. menu->setPosition(Point::ZERO);
  17. this->addChild(menu,1);
  18. autolabel1 = LabelTTF::create("中国1","Arial", 30);                                                                     ①
  19. label1->setPosition(Point(origin.x+ visibleSize.width/2,
  20. origin.y + visibleSize.height - 150));
  21. this->addChild(label1,1);
  22. autolabel2 = LabelBMFont::create("中国2","fonts/bitmapFontChinese.fnt");                             ②
  23. label2->setPosition(Point(origin.x+ visibleSize.width/2,
  24. origin.y + visibleSize.height - 250));
  25. this->addChild(label2,1);
  26. autolabel3 = Label::createWithBMFont("fonts/bitmapFontChinese.fnt","中国3");                     ③
  27. label3->setPosition(Point(origin.x+ visibleSize.width/2,
  28. origin.y + visibleSize.height - 350));
  29. this->addChild(label3,1);
  30. TTFConfigttfConfig("fonts/STLITI.ttf", 36,GlyphCollection::DYNAMIC);                                   ④
  31. autolabe4 = Label::createWithTTF(ttfConfig,"您好.",
  32. TextHAlignment::CENTER,
  33. visibleSize.width);                                              ⑤
  34. labe4->setPosition(Point(origin.x+ visibleSize.width/2,
  35. origin.y + visibleSize.height - 450));
  36. this->addChild(labe4,1);
  37. returntrue;
  38. }

上述代码第①行是创建一个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无签名)识别有误,我们一般在后面添加一些英文字符,或者“啊”等特殊的中文字符。

  1. autolabe4 = Label::createWithTTF(ttfConfig,"您好,美好的一天",                                     ①
  2. TextHAlignment::CENTER,
  3. visibleSize.width);
  4. autolabe4 = Label::createWithTTF(ttfConfig,"您好,美好的一天啊",                                           ②
  5. TextHAlignment::CENTER,
  6. visibleSize.width);
  7. autolabe4 = Label::createWithTTF(ttfConfig,"您好,美好的一天.",                                                 ③
  8. TextHAlignment::CENTER,
  9. visibleSize.width);

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

使用菜单

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

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

Cocos2d-x标签文乱码问题的更多相关文章

  1. JavaWeb--中文乱码小结

    JavaWeb--中文乱码小结 出处:http://chriszz.sinaapp.com0.纯粹html乱码: 换个editor吧(有时候notepad都比sublime_text好用),最好是在& ...

  2. 打开PDF文件弹出阅读未加标签文档的解决方法

    在“高级”菜单的“辅助工具”选中“设置助手”,然后点选“设置屏幕阅读器选项”,下一步之后,将“忽略已加标签文档的阅读顺序”和“添加标签到文档之前进行确认”(有的版本显示的是“为文档加标签前确认”)前面 ...

  3. Fedora20 和ubuntu 14.04 chrome标签中文乱码

    作为两个流行的桌面发行版本,Fedora和ubuntu最新版本都存在chrome标签中文乱码问题. 下面是解决办法,都来自百度贴吧. 1.ubuntu 系列: 解决办法就是: 编辑/etc/fonts ...

  4. FastAdmin CMS 内容管理插件标签文档

    FastAdmin CMS 内容管理插件标签文档 在CMS插件中的前端视图模板中有大量使用了自定义标签,我们在修改或制作模板的时候可以方便快捷的使用自定义标签来调用我们相关的数据. 标签库位于/add ...

  5. a,abbr,address,area,article, aside, audio标签文档

    <a>标签 download属性 <!-- 下载hello.txt --> <a href="test.txt" download="hel ...

  6. 【转】SetThreadLocale解决越南文乱码问题

    转自http://hi.baidu.com/killwolf110/item/838d56224067c63395f62b70 程序需要运行在越南地区,语言为越南文,操作系统为英文版,程序支持unic ...

  7. 导出csv文件时韩文乱码解决方法

    从asp.net导出csv这样配置可以防止韩文等乱码,在头部加上0xEF, 0xBB, 0xBF: string fileName = "attachment;filename=" ...

  8. cocos2d 艺术标签没有显示

    今天自己挖了个坑,设置数字标签的时候,无论怎么搞,程序运行后还是显示的是普通文本数字,各种原因找了一半天,最后发现在资源名字.png的前面多了一个空格,眼瞎一直没看到,最后去掉就OK了

  9. Servlet-中文乱码

    背景 从Tomcat5.x开始,GET,POST方法提交信息,Tomcat采用不同的方式来处理编码. 对于GET请求,Tomcat不会考虑使用request.setCharacterEncoding( ...

随机推荐

  1. linux C(hello world)程序调试

    程序的调试(先得安装gdb工具,以root身份执行命令:sudo apt-get install gdb) 程序的调试是一个很重要的环节,windows IDE下那些强大的调试功能,Linux以什么来 ...

  2. iOS 开发——实用技术Swift篇&Swift 懒加载(lazy)

    Swift 懒加载(lazy) 在程序设计中,我们经常会使用 * 懒加载 * ,顾名思义,就是用到的时候再开辟空间,比如iOS开发中的最常用控件UITableView,实现数据源方法的时候,通常我们都 ...

  3. UVA11038- How Many O&#39;s?(组合数学)

    题目链接 题意:求出在a到b之间的数中,有多少个0. 思路:组合数学问题.能够枚举每一个位置上的数i,如果i之前的数为left,后面的为right,后面有num位数.当i != 0时,将i置为0,所以 ...

  4. RC4加密算法

    RC4是Ron Rivest在1987年设计的密钥长度可变的流加密算法.它加解密使用相同的密钥,因此也属于对称加密算法.RC4是有线等效加密(WEP)中采用的加密算法,也曾经是TLS可采用的算法之一. ...

  5. [Tips]解决HG之waiting for lock on repository

    # Symptom 在tortoiseHg中commit或者Sync change的时候,总是出现下面的错误: waiting for lock on repository ... # Solutio ...

  6. flume1.5.2安装与简介

    关于flume的简介看参考:http://www.aboutyun.com/thread-7415-1-1.html 其实一张图就简单明了了 简单安装: 1.下载解压 ... 2.配置JDK,flum ...

  7. windows下 定时删除tomcat日志和缓存。可以保留天数

    forfiles /p "e:\Program Files\Tomcat 7.0\logs" /s /m *.log /d -5 /c "cmd /c del @path ...

  8. 在Archlinux ARM - Raspberry Pi上安装Google coder

    升级软件包 一个 pacman 命令就可以升级整个系统.花费的时间取决于系统有多老.这个命令会同步非本地(local)软件仓库并升级系统的软件包: # pacman -Syu 提示:确保make以及g ...

  9. IOS开发 xcode报错之has been modified since the precompiled header was built

    转载的文章  很实用 IOS开发xcode报错之has been modified since the precompiled header was built 今天做百度地图的时候第一次发现下面错误 ...

  10. JS实现滚动条滚到页面距离底部300px时执行事件的方法

    scrollTop为滚动条在Y轴上的滚动距离. clientHeight为内容可视区域的高度. scrollHeight为内容可视区域的高度加上溢出(滚动)的距离 $(window).scroll(f ...