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类。

完整代码如下:


    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平台真机上结果的屏幕快照。



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

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

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


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>chinese1</key>
    <string>实际使用如下</string>
    <key>japanese</key>
    <string>非常奇怪</string>
    <key>spanish</key>
    <string>引擎头文件</string>
</dict>
</plist>




有 了上面的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平台上也是没有问题的。



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


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


3,多分辨率显示问题


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


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

5,加入广告技术


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



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


本文出自 “青峰” 博客,请务必保留此出处http://zhuxianzhong.blog.51cto.com/157061/1440557

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。