setPosition(Point(100,100));this->addChild(m_label); 调试时发现m_label显示的是一串匪夷所思的" name="description" />

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

来源:未知 责任编辑:责任编辑 发表时间:2014-02-02 17:45 点击:

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

auto m_label = LabelTTF::create("新年快乐!","Arial",25);
m_label->setPosition(Point(100,100));
this->addChild(m_label);

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

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

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





	
		id
		10
		info
		新年快乐!
	
	
		id
		20
		info
		马上有钱!
	


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

1、 先读取plist文档到array中

auto array_plist = Array::createWithContentsOfFile("Chinese.plist");

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

for(int i=0;icount();i++)
{
	auto dic = (Dictionary*)array_plist->getObjectAtInder(i);//获取array_plist中的第一个对象
	int key_id = 10;//因为在plist文档中,“新年快乐!”对应的id是10
	int key_id_plist = ((String*)dic->objForKey("id"))->intValue();//获取字典中“id”的数值,将String型的转成整型的
	if(key_id == key_id_plist)
	{
		std::string info_str = ((String*)dic->objForKey("info"))->getString();//如果两个id相等,说明找到了想要获得的那个对象,然后提取key值为“info"的信息
	}
}

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

auto array_plist = Array::createWithContentsOfFile("Chinese.plist");

std::string info1;//存储新年快乐的字符串
std::string info2;//存储马上有钱的字符串

for(int i=0;icount();i++)
{
	auto dic = (Dictionary*)array_plist->getObjectAtInder(i);//获取array_plist中的第一个对象
	int key_id1 = 10;//因为在plist文档中,“新年快乐!”对应的id是10
	int key_id2 = 20;//马上好运的id
	int key_id_plist = ((String*)dic->objForKey("id"))->intValue();//获取字典中“id”的数值,将String型的转成整型的
	if(key_id1 == key_id_plist)
	{
		info_str1 = ((String*)dic->objForKey("info"))->getString();//获得”新年快乐“文字
		continue;
	}
	if(key_id2 == key_id_plist)
	{
		info_str2 = ((String*)dic->objForKey("info"))->getString();//获得”马上有钱“文字
		continue;
	}
}

auto label_1 = LabelTTF::create(info_str1,"Arial",25);
label_1->setPosition(Point(100,100);
this->addChild(label_1,1);

auto label_2 = LabelTTF::create(info_str2,"Arial",25);
label_2->setPosition(Point(100,200));
this->addChild(label_2,1);
	
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • cocos2d-x学习笔记(19)--label 、label atlas
  • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
  • Cocos2d-x学习(一):HelloWorld
  • cocos2dx在xcode下开发,编译到android上(2)
  • cocos2d 设置屏幕默认方向
  • Cocos2d-x 2.0 之 Actions “三板斧” 之一
  • cocos2d-x学习笔记(22)--地图的使用2(TMX) --Z-Order、AnchorPoi
  • cocos2d-x学习笔记(18)--游戏打包(windows平台)
  • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1