开发者社区> 技术小甜> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

14466241_201211052147331.jpg

最近,我在网络上花费了不少时间,最后基本认定使用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平台上也是没有问题的。

14466241_201211071740141.jpg

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


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


3,多分辨率显示问题


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


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

5,加入广告技术


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



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
















本文转自朱先忠老师51CTO博客,原文链接:http://blog.51cto.com/zhuxianzhong/1440557 ,如需转载请自行联系原作者





版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
启用DoH(DNS-over HTTPS)在Windows、Android、IOS平台
启用DoH(DNS-over HTTPS)在Windows、Android、IOS平台
0 0
【Flutter】packages思维以及使用Java添加Android平台特定的实现在Flutter框架里的体现和运用
【Flutter】packages思维以及使用Java添加Android平台特定的实现在Flutter框架里的体现和运用
0 0
uni-app&H5&Android混合开发一 || 最全面的uni-app离线打包Android平台教程
uni-app&H5&Android混合开发一 || 最全面的uni-app离线打包Android平台教程
0 0
使用APICloud开发app的动态权限及Android平台targetSdkVersion设置教程
targetSdkVersion:自2018年11月开始,GooglePlay以及国内大部分应用市场要求app编译目标SDK必须为26及以上,否则不予提交审核;有许多已有app转到APICloud开发后,因targetSdkVersion降级而导致无法覆盖安装;2020年以来,国家网信办等监管机构也加强了对app权限合规的监管。
0 0
Android平台HTTPS抓包全方案
Android平台HTTPS抓包全方案
0 0
Android平台OCR工具之Tess-two的编译
Android平台OCR工具之Tess-two的编译
0 0
【Android 命令行工具】Android 命令行工具简介 ( 官方文档 | SDK 命令行工具 | SDK 构建工具 | SDK 平台工具 | 模拟器工具 | Jetifier 工具 )
【Android 命令行工具】Android 命令行工具简介 ( 官方文档 | SDK 命令行工具 | SDK 构建工具 | SDK 平台工具 | 模拟器工具 | Jetifier 工具 )
0 0
【Android 逆向】Android 逆向通用工具开发 ( Windows 平台静态库程序类型 | 编译逆向工具依赖的 Windows 平台静态库程序 )
【Android 逆向】Android 逆向通用工具开发 ( Windows 平台静态库程序类型 | 编译逆向工具依赖的 Windows 平台静态库程序 )
0 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Android组件化实现
立即下载
蚂蚁聚宝Android秒级编译—— Freeline
立即下载
Android插件化:从入门到放弃
立即下载