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编码。解决方法非常easy,我们仅仅须要把HelloWorldScene.cpp文件另存为UTF-8就能够了,用记事本等文本编辑工具打然后另存为UTF-8就能够,或者是在Visual Studio工具中能够选择菜单文件→高级保存选项,在弹出例如以下图所看到的对话框,选择编码为Unicode(UTF-8无签名),然后点击确定button保存。

注意不能保存为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系列图书《Cocos2d-x实战(卷Ⅰ):C++开发》

本书交流讨论站点:http://www.cocoagame.net

欢迎加入cocos2d-x技术讨论群:257760386、327403678

时间: 2024-10-12 19:38:49

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

Fedora20 和ubuntu 14.04 chrome标签中文乱码

作为两个流行的桌面发行版本,Fedora和ubuntu最新版本都存在chrome标签中文乱码问题. 下面是解决办法,都来自百度贴吧. 1.ubuntu 系列: 解决办法就是: 编辑/etc/fonts/conf.d/49-sansserif.conf 将第一次出现的sans-serif改为ubuntu即可正常显示中文. 该更示例如下: <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd&q

标签文档添加双击标题自动关闭事件

布局控件"WeifenLuo.WinFormsUI.Docking"是一个非常棒的开源控件,用过的人都深有体会,该控件之强大.美观.不亚于商业控件.而且控件使用也是比较简单的.本文介绍如何给 WeifenLuo.WinFormsUI.Docking 控件的标签文档添加双击标题自动关闭事件,方法很简单,只需稍稍修改 WeifenLuo.WinFormsUI.Docking 的代码即可. 在DockPaneStripBase的WndProc方法里,对于左键双击消息重新作了处理,我们先找到这

DOM:文档对象模型 --树模型 文档:标签文档,对象:文档中每个元素对象,模型:抽象化的东西

DOM:文档对象模型 --树模型文档:标签文档,对象:文档中每个元素对象,模型:抽象化的东西 一:window: 属性(值或者子对象):opener:打开当前窗口的源窗口,如果当前窗口是首次启动浏览器打开的,则opener是null,可以利用这个属性来关闭源窗口. 方法(函数):事件(事先设置好的程序,被触发): 1.window.open("第一部分","第二部分","第三部分","第四部分"): 特征参数: 第一部分:写要

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

FastAdmin CMS内容管理插件标签文档 在CMS插件中的前端视图模板中有大量使用了自定义标签,我们在修改或制作模板的时候可以方便快捷的使用自定义标签来调用我们相关的数据. 标签库位于/addons/cms/taglib/Cms.php文件,我们可以看到标签库有定义可调用的标签和属性,如下 https://ask.fastadmin.net/article/2580.html 原文地址:https://www.cnblogs.com/F4NNIU/p/11045447.html

JSP提交表单 a标签传值 乱码问题

访问URL传递参数 一般有2种方式:post .get 无论是JSP提交表单到servlet还是action还是其它 或者 a标签指定URL传递参数 出现的乱码问题可以按照访问方式来解决 1.对于POST访问方式可以设置过滤器过滤字符 ----举个栗子----对访问根目录下的所有JSP页面之前设置字符过滤器,指定过滤后的编码为”UTF-8“ package com.smxy.lxz.filter; import java.io.IOException;import javax.servlet.F

Ubuntu安装Chrome标签页乱码解决方案

今天下载了Chrome后,发现打开中文网站,标签页是乱码的状态,可以通过如下方式解决: 打开/etc/fonts/conf.d/49-sansserif.conf这个文件然后修改倒数第四行的字体为ubuntu 即可

前端基础之操作标签—文档处理

一.操作标签 1.文档处理   <1>添加到指定元素内部的后面 $(A).append(B) // 把B追加到A后面 $(B).appendTo(A) // 把B追加到A后面   <2>添加到指定元素内部的前面 $(A).prepend(B); // 把B添加到A的前面 $(B).prependTo(A); // 把B添加到A的前面   <3>添加到指定元素外部的后面 $(A).after(B) // 把B放到A外部的后面 $(B).insertAfter(A) //

Servlet-中文乱码

背景 从Tomcat5.x开始,GET,POST方法提交信息,Tomcat采用不同的方式来处理编码. 对于GET请求,Tomcat不会考虑使用request.setCharacterEncoding("UTF-8")设置的编码,而会永远使用ISO-8859-1编码. 对于POST请求,Tomcat会使用request.setCharacterEncoding("UTF-8")设置的编码,如果没有设置,则使用"ISO-8859-1". 1 get方

深入Struts2的过滤器FilterDispatcher--中文乱码及字符编码过滤器

引用 前几天在论坛上看到一篇帖子,是关于Struts2.0中文乱码的,楼主采用的是spring的字符编码过滤器(CharacterEncodingFilter)统一编码为GBK,前台提交表单数据到Action,但是在Action中得到的中文全部是乱码,前台的页面编码都是GBK没有问题.这是为什么呢?下面我们就通过阅读FilterDispatcher和CharacterEncodingFilter这两个过滤器的源代码,了解其实现细节,最终得出为什么中文还是乱码! 测试环境及其前置知识 Struts