TTF中文乱码 — Cocos2dx 游戏移植WP8之路

Cocos2dx 是目前最流行的手机游戏引擎之一,开源、轻量、多平台等的诸多特性使得它被很多国内外手游开发者所喜爱。利用Cocos2dx来开发Windows Phone 8的游戏同样也是非常的方便高效。当然任何跨平台的游戏引擎,最终解决的都只能是游戏层面的问题:包括场景的管理、图形的渲染、真实物理世界的模拟等;要想真正在一个平台上把游戏做好,不可避免会遇到很多和平台相关的问题,需要我们每个游戏程序员对于该平台的技术有个比较深入的了解。在Windows Phone 8这个平台上,我希望通过自己的努力帮助大家解决移植过程中遇到的问题。 Cocos2dx的WP8项目在中文显示这一块,一直有些问题。虽然这算不上很严重的Bug,但也足以令不少开发者费神。因为这是所有面向国内市场的游戏开发者所无法回避的问题。我总结了一下,中文显示不出主要集中在大家使用CCLabeTTF显示TrueTypeFont的中文时,会发生二个症状:一是中文显示为方块,二是中文显示乱码。如下图所示:   显示方块   显示乱码   更麻烦的是,Cocos2dx自带的TestCpp也有同样的问题(注1)。 下面给出解决方案:   中文只显示方块的问题是由于CCTableTTF所指定的TTF字体在WP8下不支持中文,比如Marker Felt 或是Arial字体。解决的办法很简单,只要替换支持中文的字体即可。这里推荐大家使用arialuni.ttf (Arial Unicode MS) 或是Cocos2dx自带的HKYuanMini.ttf(我已上传arialuni.ttf字库供大家使用)。这里提醒大家需要把新添加的字库文件放到游戏工程的Resources\fonts目录下,并确保该字库文件打入XAP包中。代码的写法类似下面所示: auto label = LabelTTF::create(“梅颖广研究Cocos2dx”,”fonts/arialuni.ttf”,36);   如果出现中文乱码的情况,那就是字符编码不对的问题,这不是简单替换字库文件所能搞定的。大家所做的第一件事情,就是确认需要输出的中文是什么编码。如果大家是直接把输出的中文写在Visual Studio里,就像上述的那条语句一样,那就去查看一下Visual Studio编码方式。方法是打开File \ Advanced Save Option…菜单,弹出如下对话框。 一般可能会是三种编码方式:Unicode(UTF-8 without signature), Unicode(UTF-8 with signature), Chinese Simplified (GB2312)。其中UTF8 的signature的意思就是BOM (Byte Order Mark) ,带不带BOM的区别可以参考如下文章: 链接地址: http://gkecenter.blog.163.com/blog/static/18138030520129292491090/   当然大家可以通过上述对话框切换编码。Cocos2dx处理的必须是UTF8编码的字符,如果不符合的话就会显示乱码。除此之外我还发现,如果编码选择不好,在代码中直接插入中文的时候,中文字符会和后面的标点产生干涉,发生奇怪的编译错误。比如下面这句,究和右分号会产生错误。 auto label =…

0