• cocos2d-x wp8 中文显示问题


    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>


     

  • 相关阅读:
    绕过卡巴斯基等杀软抓取 lsass 内存踩坑
    Redis 未授权访问 getshll
    linux 中用 sed 指令 删除/添加 指定行首内容
    使用 git 的时候,出现很多别人的commit
    关于近源渗透测试的免杀
    GIT 使用
    web安全入门(更新中)
    一篇入门代码审计
    动态加载dll的实现+远线程注入
    spring系列cve poc编写
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6805405.html
Copyright © 2020-2023  润新知