Cocos2dx 3.0 过渡篇(六)中文显示的一种解决办法

简介: <p style="color:rgb(54,46,43); font-family:Arial; font-size:14.44444465637207px; line-height:26px"> 尊重原创,转载请注明来自:star特530的CSDN博客 <a target="_blank" href="http://blog.csdn.net/start530/article/det

尊重原创,转载请注明来自:star特530的CSDN博客 http://blog.csdn.net/start530/article/details/18740733

想必大家应该都遇到过这种情况,在VS下编写代码时需要在Label显示中文时,代码如下:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. auto m_label = LabelTTF::create("新年快乐!","Arial",25);  
  2. m_label->setPosition(Point(100,100));  
  3. this->addChild(m_label);  

调试时发现m_label显示的是一串匪夷所思的乱码,这就说明模拟器并不支持中文的显示方式(其实我发现自己很多词句的描述方式不够严谨,大家看得懂就好)。我曾经有试图解决这个问题,但都以失败告终。最后再请教一些大神时才恍然大悟:原来写这种代码应该养成一种好的习惯,就是不要直接在代码里将中文打进去,而是应该将游戏中会用到的中文语句写到一个文档中,当需要使用到中文时再到文档中读取。这种方式不仅解决了中文显示的问题,也方便以后语句的修改。

 

下面我就以plist文档为例吧。

假设有一个名为 Chinese.plist 的文档,里面的内容是xml格式的,如下:

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
  3. <plist version="1.0">  
  4. <array>  
  5.     <dict>  
  6.         <key>id</key>  
  7.         <string>10</string>  
  8.         <key>info</key>  
  9.         <string>新年快乐!</string>  
  10.     </dict>  
  11.     <dict>  
  12.         <key>id</key>  
  13.         <string>20</string>  
  14.         <key>info</key>  
  15.         <string>马上有钱!</string>  
  16.     </dict>  
  17. </array>  
  18. </plist>  

接下来就讲解下如何提取这些中文。

1、 先读取plist文档到array

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. auto array_plist = Array::createWithContentsOfFile("Chinese.plist");  

2、 创建一个字典来提取“新年快乐!”这几个字

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. for(int i=0;i<array_plist->count();i++)  
  2. {  
  3.     auto dic = (Dictionary*)array_plist->getObjectAtInder(i);//获取array_plist中的第一个对象  
  4.     int key_id = 10;//因为在plist文档中,“新年快乐!”对应的id是10  
  5.     int key_id_plist = ((String*)dic->objForKey("id"))->intValue();//获取字典中“id”的数值,将String型的转成整型的  
  6.     if(key_id == key_id_plist)  
  7.     {  
  8.         std::string info_str = ((String*)dic->objForKey("info"))->getString();//如果两个id相等,说明找到了想要获得的那个对象,然后提取key值为“info"的信息  
  9.     }  
  10. }  

3、 好了,方法就是上述这样,应该还蛮简单的吧。下面写段完整的代码,将“新年快乐!”,“马上有钱”都显示出来。

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. auto array_plist = Array::createWithContentsOfFile("Chinese.plist");  
  2.   
  3. std::string info1;//存储新年快乐的字符串  
  4. std::string info2;//存储马上有钱的字符串  
  5.   
  6. for(int i=0;i<array_plist->count();i++)  
  7. {  
  8.     auto dic = (Dictionary*)array_plist->getObjectAtInder(i);//获取array_plist中的第一个对象  
  9.     int key_id1 = 10;//因为在plist文档中,“新年快乐!”对应的id是10  
  10.     int key_id2 = 20;//马上好运的id  
  11.     int key_id_plist = ((String*)dic->objForKey("id"))->intValue();//获取字典中“id”的数值,将String型的转成整型的  
  12.     if(key_id1 == key_id_plist)  
  13.     {  
  14.         info_str1 = ((String*)dic->objForKey("info"))->getString();//获得”新年快乐“文字  
  15.         continue;  
  16.     }  
  17.     if(key_id2 == key_id_plist)  
  18.     {  
  19.         info_str2 = ((String*)dic->objForKey("info"))->getString();//获得”马上有钱“文字  
  20.         continue;  
  21.     }  
  22. }  
  23.   
  24. auto label_1 = LabelTTF::create(info_str1,"Arial",25);  
  25. label_1->setPosition(Point(100,100);  
  26. this->addChild(label_1,1);  
  27.   
  28. auto label_2 = LabelTTF::create(info_str2,"Arial",25);  
  29. label_2->setPosition(Point(100,200));  
  30. this->addChild(label_2,1);  

恩,运行效果应该是像下面这样的……………………..

额,其实我代码是在word里写的,所以也没去调试对不对

~~


明天周六,放假一天。又可以搞下微信公众平台了。


转载请注明地址:http://blog.csdn.net/start530/article/details/18740733

相关文章
|
6月前
vscode编辑器使用拓展插件background添加背景图片改变外观
vscode编辑器使用拓展插件background添加背景图片改变外观
88 0
|
7月前
|
自然语言处理 Linux 程序员
Lvgl(V8.2)自定义字体实现多国语言切换功能
Lvgl(V8.2)自定义字体实现多国语言切换功能
471 0
|
8月前
|
XML 数据格式 C++
Visual Studio 2019 设置 doxygen 注释颜色
VS 中如何修改 doxygen 格式注释的颜色
131 0
Visual Studio 2019 设置 doxygen 注释颜色
|
10月前
|
Linux 测试技术 Windows
freetype的交叉编译及在嵌入式linux上的简单使用及改变字体背景和颜色
freetype的交叉编译及在嵌入式linux上的简单使用及改变字体背景和颜色
|
编解码
flstudio怎么改主题,如何更改FL Studio21背景图片
FL Studio 21更换嵌入背景,通过自定义背景这个小功能可以让你随意更新FL Studio这款编曲软件的背景,让软件焕然一新。 自定义背景
155 0
flstudio怎么改主题,如何更改FL Studio21背景图片
|
Java
修改OpenJDK字体渲染,无可见改进
修改OpenJDK字体渲染,无可见改进
104 0
|
Java 程序员 Android开发
Eclipse 答疑:Eclipse 如何更换夜间及外部主题?如何修改代码样式、背景颜色、字体大小?为何注释文字大小不一?
Eclipse 答疑:Eclipse 如何更换夜间及外部主题?如何修改代码样式、背景颜色、字体大小?为何注释文字大小不一?
185 0
Eclipse 答疑:Eclipse 如何更换夜间及外部主题?如何修改代码样式、背景颜色、字体大小?为何注释文字大小不一?
|
计算机视觉
Qt实用技巧:软件演示版永久提示框
Qt实用技巧:软件演示版永久提示框
Qt实用技巧:软件演示版永久提示框
关于 qml开发中使用Image元素切换图片闪黑屏 的解决方法
关于 qml开发中使用Image元素切换图片闪黑屏 的解决方法
关于 qml开发中使用Image元素切换图片闪黑屏 的解决方法