cocos2d-x wp8 中文显示问题

本文介绍了在WP8平台使用Cocos2d-x遇到的中文显示问题及解决方案,包括调整字符串UTF8编码及添加中文字体资源,并提供了一种通过读取本地化文件来自动处理多语言环境的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cocos2d-x项目在wp8下中文显示不了。有两个原因:

1. 本身字符串的utf8编码, 有问题。

2. 显示中文所须要的字体,缺失。

 

要解决第二个问题非常easy,在fonts下加入一个中文字体。在显示的时候制定此中文字体

labelArcade = CCLabelTTF::create("中文字符串", "中文字体名称",字体大小);


 

至于第一个问题,说的是不能像上文那样直接用字符串写“中文字符串”,解决方式有gb2312ToUnicode的方法,小转换一下子。百度一搜有非常多演示样例代码,恕不赘言,由于这样的办法并非太好--总是要做多语言的嘛。我们本来也不会直接写上中文字符串在那里。

所以。我们建一个文件。专门放置中文字符(还有对应的专门放置英语、法语、西班牙语的文件),然后通过读取文件的方式,读过来的字符串自然已经utf8编码过:

labelArcade = CCLabelTTF::create(localizeUtil::getLocalizeStringByKey("mode_arcade"), localizeUtil::getLocalizeFontName(), localizeUtil::getFontSizeH2());


另附localizeUtil的实现:

localizeUtil.h

class localizeUtil
{
public:
	static bool init();
	static const char* getLocalizeStringByKey(std::string key);
	static const char* getLocalizeFontName();
	static const float getFontSizeH1();
	static const float getFontSizeH2();
	static const float getFontSizeH3();
	static const float getFontSizeH4();
	static const float getFontSizeH5();
};


localizeUtil.cpp

#include "localizeUtil.h"
#include "cocos2d.h"

USING_NS_CC;

static char* fontName;
static char* fontNameChinese;
static char* fontNameEnglish;

static char* languageMappingFolder;

static char* resourcePath;


const char* localizeUtil::getLocalizeStringByKey(std::string key)
{
	CCDictionary *chnStrings = CCDictionary::createWithContentsOfFile(resourcePath);
	const char *value = ((CCString*)chnStrings->objectForKey(key))->getCString();
	return value;
}

const char* localizeUtil::getLocalizeFontName()
{
	return fontName;
}

const float localizeUtil::getFontSizeH1()
{
	return 50;
}
const float localizeUtil::getFontSizeH2()
{
	return 40;
}
const float localizeUtil::getFontSizeH3()
{
	return 30;
}
const float localizeUtil::getFontSizeH4()
{
	return 20;
}
const float localizeUtil::getFontSizeH5()
{
	return 16;
}
bool localizeUtil::init()
{

	fontNameChinese = "SimpleGB2312";
	fontNameEnglish = "Arial";


	resourcePath = "local/s%/strings.xml";



	const char* lc = CCApplication::getInstance()->getCurrentLanguageCode();

	ccLanguageType currentLanguageType = Application::getInstance()->getCurrentLanguage();
	switch (currentLanguageType)
	{
	case kLanguageChinese:
		fontName = fontNameChinese;
		languageMappingFolder = "zhcn";
		resourcePath = "local/zhcn/strings.xml";
		break;
	case kLanguageEnglish:
		fontName = fontNameEnglish;
		languageMappingFolder = "enus";
		resourcePath = "local/enus/strings.xml";
		break;
	case kLanguageSpanish:
		fontName = fontNameEnglish;
		languageMappingFolder = "es";
		resourcePath = "local/es/strings.xml";
		break;
	case kLanguageFrench:
		fontName = fontNameEnglish;
		languageMappingFolder = "fr";
		resourcePath = "local/fr/strings.xml";
		break;
	default:
		fontName = fontNameEnglish;
		languageMappingFolder = "enus";
		resourcePath = "local/enus/strings.xml";
	}

	return true;
}

 

文件夹结构:

strings.xml

<dict>
    <key>mode</key>
    <string>Mode</string>
    <key>mode_classic</key>
    <string>Classic</string>
</dict>


 

转载于:https://www.cnblogs.com/gccbuaa/p/6805405.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值