Win32游戏到Android平台移植时必须解决的问题集锦-创新互联

这方面的问题很多,在目前网络上很难找到满足的答案。我在这里将把自己的一个游戏从WIN32到ANDROID移植过程必须面对和要解决的问题,列举出来(有些是已经得到回答的,有些还未解决)。

1,如何显示自己的游戏程序图标

这个使用传统的android平台思路实现即可,即修改工程的proj.android\res路径下drawable-hdpi、drawable-ldpi、drawable-mdpi、drawable-xhdpi下的icon.png文件。

注 意:一次试验中我仅修改了drawable-hdpi和drawable-mdpi下的文件,而没有修改drawable-ldpi下的图标,结果在最终 的真机(Samsung I9100)上显示是仍然是drawable-ldpi下的系统默认的图标。因此,只有全面修改上面文件夹(有的文件夹可以为空)下的图标为一致的图像文 件时才能达到目的。

2,中文字体的显示

这个问题比较复杂,因为存在多种情况。让我们来逐一讨论。最主要的参考资源首先就是伴随引擎的TESTCPP示例中的LabelTest部分。
值得注意的是,其中有几个例子是有关于汉字显示的,因为我们在本文中最关心的首先是在WIN32下显示正常的汉字,然后在ANDROID平台上也能正常地显示汉字,
所以,这几个例子需要认真地研究。

例1:BMFontUnicode类。

完整代码如下:

创新互联建站主要从事做网站、网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务固镇,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

   CCDictionary *strings = CCDictionary::createWithContentsOfFile("fonts/strings.xml");
   const char *chinese = ((CCString*)strings->objectForKey("chinese1"))->m_sString.c_str();
   const char *japanese = ((CCString*)strings->objectForKey("japanese"))->m_sString.c_str();
   const char *spanish = ((CCString*)strings->objectForKey("spanish"))->m_sString.c_str();

   CCSize s = CCDirector::sharedDirector()->getWinSize();

   CCLabelBMFont *label1 = CCLabelBMFont::create(spanish, "fonts/arial-unicode-26.fnt", 200, kCCTextAlignmentLeft);
   addChild(label1);
   label1->setPosition(ccp(s.width/2, s.height/4*3));

   CCLabelBMFont *label2 = CCLabelBMFont::create(chinese, "fonts/arial-unicode-26.fnt");
   addChild(label2);
   label2->setPosition(ccp(s.width/2, s.height/4*2));

   CCLabelBMFont *label3 = CCLabelBMFont::create(japanese, "fonts/arial-unicode-26.fnt");
   addChild(label3);
   label3->setPosition(ccp(s.width/2, s.height/4*1));


上面代码在WIN32下与ANDROID平台上都可以正常显示汉字。下面给出ANDROID平台真机上结果的屏幕快照。

Win32游戏到Android平台移植时必须解决的问题集锦

最近,我在网络上花费了不少时间,最后基本认定使用CCLabelBMFont 显示文字是非常不错的选择(有些文章说CCLabelTTF存在效率问题,就先不使用了)。

那么,直接在上面Create方法的第一个参数中使用字符串,例如“中国”,可以吗?NO!!!!!!!!!!!!!
这个数据必须为UNICODE编码!!!

经 过分析,我选择了先把游戏中要使用的文字保存在一个UNICODE编码的文本文件中(后面还要说这件事),然后根据DEMO中所示,创建一个XML文件, 其格式 与DEMO中一致。看下面的例子。注意:其中的UNICODE标志(看一个DEMO中的XML文件内容即可)。






   chinese1
   实际使用如下
   japanese
   非常奇怪
   spanish
   引擎头文件


有 了上面的XML文件,下面要使用字体生成器创建相应的字体及图像文件。我建议使用(我在WINDOWS下,针对ANDROID平台)BMFont。就是 DEMO中LabelTest文件中多处指出的那一个(http://www.angelcode.com/products/bmfont/ (Free, Windows only))。

下载后使用它,你可以参考一篇文章(http://blog.csdn.net/aa4790139/article/details/8113197)。

但 是,上面的文章仅是入门级的,有几个问题没有指明。我使用其中的方法,可以显示汉字了,但是汉字有黑色底纹。解决办法是:把文章中Export Options处提到的8更改为24即可。当然,使用EDIT-SELECT CHARS FROM FILE时,必须导入UTF-8格式的文本文件。

另 外,BMFont功能还是相当不错的。尽管它生成的.FNT文件支持多个(页)png文件,但是就我目前使用的COCOS2D-X 2.0.2而言却不支 持-仅支持一页(一个PNG)情况。因此,如果你导入的TXT文件比较大,需要在Export Options窗口中把位置调整大一些(默认是256X256),例如调整为256X512。总之,你需要图像调整到一个尽可能小但是又能够存放下你想使 用的所有汉字的一个PNG文件内。

其他的使用细节就不说了。

对于生成的PNG文件,你可以使用PHOTOSHOP这样的工具,对文字进行尽情加工。例如,DEMO中的金字也许就是这样加工的。下图给出了我的WIN32程序的一个快照(我的PS水平不好)。在ANDROID平台上也是没有问题的。

Win32游戏到Android平台移植时必须解决的问题集锦

提示:选定PNG文件中的所有文字让我费了一些脑筋,最后找到办法是:选择-色彩范围-高光。

之后,使用例如最上面的编码就可以显示你自己的汉字了(BOTH WIN32 AND ANDROID!!!)。

3,多分辨率显示问题

4,快捷菜单与后退键的操作

在ANDROID平台上,这个比较简单。。。。。。

5,加入广告技术

6,定制自己的游戏软件标题名称

这个只需要修改res\values目录下文件strings.xml中app_name的内容即可,建议在Eclipse中完成。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


新闻名称:Win32游戏到Android平台移植时必须解决的问题集锦-创新互联
标题链接:http://hbruida.cn/article/coopjh.html