Cocos2d-x标签文乱码问题
我们在Windows下使用Visual Studio 2012开发游戏的时候,使用标签中包含中文时候会出现乱码或无法显示,如下图所示:
而应该显示的中文是如下图所示:
HelloWorldScene.cpp中init函数如下:
- bool HelloWorld::init()
- {
- if( !Layer::init() )
- {
- return false;
- }
- SizevisibleSize = Director::getInstance()->getVisibleSize();
- Pointorigin = Director::getInstance()->getVisibleOrigin();
- autocloseItem = MenuItemImage::create(
- "CloseNormal.png",
- "CloseSelected.png",
- CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));
- closeItem->setPosition(Point(origin.x+ visibleSize.width - closeItem->getContentSize().width/2 ,
- origin.y +closeItem->getContentSize().height/2));
- automenu = Menu::create(closeItem, NULL);
- menu->setPosition(Point::ZERO);
- this->addChild(menu,1);
- autolabel1 = LabelTTF::create("中国1","Arial", 30); ①
- label1->setPosition(Point(origin.x+ visibleSize.width/2,
- origin.y + visibleSize.height - 150));
- this->addChild(label1,1);
- autolabel2 = LabelBMFont::create("中国2","fonts/bitmapFontChinese.fnt"); ②
- label2->setPosition(Point(origin.x+ visibleSize.width/2,
- origin.y + visibleSize.height - 250));
- this->addChild(label2,1);
- autolabel3 = Label::createWithBMFont("fonts/bitmapFontChinese.fnt","中国3"); ③
- label3->setPosition(Point(origin.x+ visibleSize.width/2,
- origin.y + visibleSize.height - 350));
- this->addChild(label3,1);
- TTFConfigttfConfig("fonts/STLITI.ttf", 36,GlyphCollection::DYNAMIC); ④
- autolabe4 = Label::createWithTTF(ttfConfig,"您好.",
- TextHAlignment::CENTER,
- visibleSize.width); ⑤
- labe4->setPosition(Point(origin.x+ visibleSize.width/2,
- origin.y + visibleSize.height - 450));
- this->addChild(labe4,1);
- returntrue;
- }
上述代码第①行是创建一个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无签名)识别有误,我们一般在后面添加一些英文字符,或者“啊”等特殊的中文字符。
- autolabe4 = Label::createWithTTF(ttfConfig,"您好,美好的一天", ①
- TextHAlignment::CENTER,
- visibleSize.width);
- autolabe4 = Label::createWithTTF(ttfConfig,"您好,美好的一天啊", ②
- TextHAlignment::CENTER,
- visibleSize.width);
- autolabe4 = Label::createWithTTF(ttfConfig,"您好,美好的一天.", ③
- TextHAlignment::CENTER,
- visibleSize.width);
在上面的中文第①行代码在Visual Studio下无法编译,第②行代码可以字符串后面追加“啊”编译通过,并且能够正常显示。第③行代码我们在中文字符后面追加“.”(英语句号),编译通过,但是“天”字不能显示。而在Android和iOS平台,如果如果也采用UTF-8,那么上面的问题就不会出现,能够编译和正常显示。
使用菜单
菜单中又包含了菜单项,菜单项类是MenuItem,每个菜单项都有三个基本状态:正常、选种和禁止。我们再回顾一下MenuItem类图如下图所示。
菜单分类是按照菜单项进行分类的,从MenuItem类图中可见MenuItem的派生类有:MenuItemLabel、MenuItemSprite和MenuItemToggle。其中MenuItemLabel类是文本菜单,它有两派生类MenuItemAtlasFont和MenuItemFont。MenuItemSprite类是精灵菜单,它的派生类是MenuItemImage,它是图片菜单,MenuItemToggle类是开关菜单。
Cocos2d-x标签文乱码问题的更多相关文章
- JavaWeb--中文乱码小结
JavaWeb--中文乱码小结 出处:http://chriszz.sinaapp.com0.纯粹html乱码: 换个editor吧(有时候notepad都比sublime_text好用),最好是在& ...
- 打开PDF文件弹出阅读未加标签文档的解决方法
在“高级”菜单的“辅助工具”选中“设置助手”,然后点选“设置屏幕阅读器选项”,下一步之后,将“忽略已加标签文档的阅读顺序”和“添加标签到文档之前进行确认”(有的版本显示的是“为文档加标签前确认”)前面 ...
- Fedora20 和ubuntu 14.04 chrome标签中文乱码
作为两个流行的桌面发行版本,Fedora和ubuntu最新版本都存在chrome标签中文乱码问题. 下面是解决办法,都来自百度贴吧. 1.ubuntu 系列: 解决办法就是: 编辑/etc/fonts ...
- FastAdmin CMS 内容管理插件标签文档
FastAdmin CMS 内容管理插件标签文档 在CMS插件中的前端视图模板中有大量使用了自定义标签,我们在修改或制作模板的时候可以方便快捷的使用自定义标签来调用我们相关的数据. 标签库位于/add ...
- a,abbr,address,area,article, aside, audio标签文档
<a>标签 download属性 <!-- 下载hello.txt --> <a href="test.txt" download="hel ...
- 【转】SetThreadLocale解决越南文乱码问题
转自http://hi.baidu.com/killwolf110/item/838d56224067c63395f62b70 程序需要运行在越南地区,语言为越南文,操作系统为英文版,程序支持unic ...
- 导出csv文件时韩文乱码解决方法
从asp.net导出csv这样配置可以防止韩文等乱码,在头部加上0xEF, 0xBB, 0xBF: string fileName = "attachment;filename=" ...
- cocos2d 艺术标签没有显示
今天自己挖了个坑,设置数字标签的时候,无论怎么搞,程序运行后还是显示的是普通文本数字,各种原因找了一半天,最后发现在资源名字.png的前面多了一个空格,眼瞎一直没看到,最后去掉就OK了
- Servlet-中文乱码
背景 从Tomcat5.x开始,GET,POST方法提交信息,Tomcat采用不同的方式来处理编码. 对于GET请求,Tomcat不会考虑使用request.setCharacterEncoding( ...
随机推荐
- 使用Url.Routeurl获取url值。
1,获取url值. public ActionResult About() { RouteValueDictionary RVD = new Ro ...
- Tuple类型
Tuple类型类似的体现了C#中的匿名类型 var person=new { Name="Eric"; Age=18: } 调用: Console.writeline( perso ...
- reactor官方文档译文(1)Reactor简介
原文地址:http://projectreactor.io/docs/reference/ Reactor简介 Reactor是一个基础库,用在构建实时数据流应用.要求有容错和低延迟至毫秒.纳秒.皮秒 ...
- SecureCRT 滚动条设置
不久前在Debian下使用kermit时发现kermit有一些优点,比如当串口上不断有信息打印时,仍然可以通过拖动滚动条来查看以前打印的信息,并且滚动条不会滚动到最下面.当按下回车键时,滚动条会自动滚 ...
- 1.4.2 solr字段类型--(1.4.2.2)solr附带的字段类型
1.4.2 solr字段类型 (1.4.2.1) 字段类型定义和字段类型属性. (1.4.2.2) solr附带的字段类型 (1.4.2.3) 使用货币和汇率 (1.4.2.4) 使用Dates(日期 ...
- java笔记 chapter1 java是什么,能干什么,有什么,特点,开发环境
一,java是什么 二,java能干什么 三,java有什么 四,java的特点 五,java的三大特性:虚拟机,垃圾回收和代码安全 六,构建JSE开发环境:下载安装jdk和配置环境变量 七,编写并运 ...
- Java基础知识强化106:Java中 int 的各进制之间的转换
1.二.八.十.十六进制之间的转换 下面是示例代码,我们直接通过JDK工具库中的方法实现的,如下: public static Integer valueOf(String s, int radix ...
- Android(java)学习笔记264:Android下的属性动画高级用法(Property Animation)
1. 大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是最常用的一些用法,这些用法足以覆盖我们平时大多情况下的动画需求了.但是,正如上篇文章当中所说到的,属性动画对补间动画 ...
- iOS - UI - UISwitch
UISwitch //开关 不用设置宽高 有默认宽高 UISwitch * sw = [[UISwitch alloc] initWithFrame:CGRectMake(100, 100, ...
- 关于Navicat Premium导入xlsx的问题
这段时间由于工作需要,频繁通过Oracle导入/导出大量数据,测试了很多软件,都不理想.PL/SQL Developer导入.导出都卡死:Oracle SQL Developer也是导入.导出都卡的半 ...