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( ...
随机推荐
- Codeforces Gym 100015H Hidden Code 暴力
Hidden Code 题目连接: http://codeforces.com/gym/100015/attachments Description It's time to put your hac ...
- Codeforces Round #309 (Div. 2) B. Ohana Cleans Up 字符串水题
B. Ohana Cleans Up Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/554/pr ...
- 基于私钥加密公钥解密的RSA算法C#实现
RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作. RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一 ...
- 【原创】AltiumDesigner 6 的自定义菜单
AltiumDesigner 6 的自定义菜单,数据保存在DXP.RCS文件中通过测试,添加一个自定义菜单名为HHH,然后用Editplus在C:\Users\pcittsy\AppData\Roam ...
- 即时通信(RPC)的Rtmp实现--代码实现篇
实现的一般步骤是: step 1: 定义NetConnection对象连接rtmp,并监听NetStatusEvent.NET_STATUS事件 step 2: 在NetStatusEvent.NET ...
- range与xrange之间的差异(转)
range 函数说明:range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列.range示例: >>> ra ...
- birt 批改导出的文件名【转】
birt 修改导出的文件名 birt 修改导出的文件名分两种实现方法, 第一种:修改 web.xml 中 配置的 BIRT_FILENAME_GENERATOR_CLASS <!-- Filen ...
- vm.dirty_ratio & vm.dirty_background_ratio
https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/ Better Lin ...
- 教程:如何减小iOS应用程序的大小?
本文译自:Reducing the size of my App Q: 怎样才能让我的程序安装包小一点,让程序的下载和安装更快速? A: 本文收集了一些减小程序安装包大小的相关技巧(当第一次下载和安装 ...
- windows 8.1 在硬盘上创建扩展分区
管理员-命令提示符-> diskpart -->进入分区工具. list disk -->显示电脑连接磁盘数. select disk * -->选择编号为*的 ...