基于J2ME平台的手机游戏移植方法探讨
2020-12-27
来源:年旅网
第11卷第1期 2010年1月 j海商警院母辊 Journal ofshangll丑i Business School No 1 VoI.11 J∞2010 【操作实务】 基于J2 M E平台的手机游戏移植方法探讨 董家苏 (上海交通大学软件学院,中国上海200030;上海商业会计学校,中国上海200011) 摘要:J2ME是Java技术专门为嵌入式系统定制的版本,已经成为当前业界流行的无线应用开发平台。虽然理论上 J2ME为开发人员提供了“一次编写,到处运行”的环境,但是由于手机设备间的巨大差异,同一款游戏程序很难直接运 行在不同的手机设备上。如何有效快捷地将应用程序移植到众多的手机平台上,也是手机游戏开发中面临的主要问题。 本文分析了现有的移植解决方案,探索并尝试提出更有效的移植方法。 关键词:J2ME;手机游戏;移植 中图分类号:Tf)312 文献标识码:A 文章编号:1637—324X(2010)一01—96—98—03 随着手机设备的多样化,手机游戏提供商需要将现 展库的应用不能在不支持这些扩展库的设备上运行;此 有的游戏移植到更多的手机设备上。同时全球的移动运 外不同手机设备的内存容量不同。 营商也要求各手机游戏提供商广泛地支持手机设备。因 另一方面,手机设备用户界面的差异包括屏幕尺寸 此开发人员必须为同一款手机游戏定制多个版本,以满足 不同、支持的颜色深度不同、按键习惯不同、左右键键 不同的手机设备。目前,手机游戏的开发平台有BI W、 值不同、对声音的支持不同,以及触摸式手机与键盘式 .net、WMS、Symbian、SMS、Java2 Micro Edition(J2ME) 手机的操作方式不同。 等。J2ME因诞生于Java系统,受惠于Java手机产品的 从市场上常见的手机设备来看,高端手机的硬件性 普及性与实用性,从而成为手机网络游戏较为理想的开 能已十分“强悍”,就拿当前市场上广受欢迎的NOKIA 发平台。然而,由于不同品牌、不同型号的手机平台间 N97来看,其1 600万色TFT彩色屏幕达3.5英寸,分 缺乏兼容性,即使用J2ME平台开发手机网络游戏,仍 辨率达360×640像素,分辨率的屏幕,处理器主频为 然面对着不同手机设备兼容移植的问题。 434 MHz,其性能大致相当于一台PC;而低端手机屏幕 一、手机设备的差异及游戏移植中的问题 分辨率低(分辨率或低于100×100像素),处理器处理 (一)手机设备的差异 能力有限,一些机型内存大小仅200字节。 在全球市场上,拥有众多的手机品牌,各种品牌有 这些差异使得同一游戏应用要支持不同的手机设备, 许多不同的型号。这些种类繁多的手机,在性能、显示 必须进行相应的移植工作。 分辨率以及内存容量等方面拥有巨大的不同。这些差异 (二)手机游戏移植中的问题 主要体现在以下两个方面。 同一游戏应用要支持不同的手机设备,必须进行相 一方面,各手机设备对Java虚拟机的实现的差异。 应的移植工作。在移植游戏应用程序过程中一般会遇到 硬件的运算能力导致Java虚拟机运行速度的不同;实现 以下问题。 的MIDP(Mobile Information Device Profile)版本不同, I.由于虚拟机的差异引起的移植问题 在手机游戏开发过程中需要兼顾MIDP低版本和高版本; (1)当把一款在高版本MIDP基础上实现的手机游戏 各设备厂家拥有自己的扩展类库,使用了各厂家自己扩 移植到一款低版本MIDP手机上的时候,一系列新增的 API就需要额外的实现。 收稿日期:200%11-30 (2)当使用了具体厂家提供的类库,移植到其他厂家 作者简介:董家苏,男,上海人,上海交通大学软件学院硕士研究 生,上海商业会计学校教师,研究方向:数字媒体。电子信箱: 的机型上时,需要使用不同的方法进行替换。比如,原 susususan321@sina corf1. 来是针对HTC设备开发的应用,并使用HTC类库,当 ・96・ hctp://www.sbs.edu.cI1 第11卷第1期 2010年1月 董家苏 DONG Jiasu No 1、,oI 11 201O 移植到其他厂商的机型上时,需要通过其他方式来实现 相应的功能。 (3)不同的手机设备具有不同的内存容量和应用程序 大小限制,在它们之间进行游戏移植时需要进行适当的 调整。例如一些低端手机的堆内存容量比较小,可能会导 致内存溢出的异常,需要专门进行优化;而对Jar(文件格 式)包容量较小的机型,需要大幅的消减资源和代码。 (4)对处理能力有限的一些低端手机,需要专门进行 优化。还有可能会遇到手机本身由于虚拟机的实现或者硬 件导致的一些殴JG(缺陷),需要专门针对此手机修改。 2.由于用户界面的差异引起的移植问题 (1)由于手机设备屏幕尺寸的不同,图片资源的大 小、整个游戏的坐标位置、文字的排版都需要重新调整。 (2)由于手机设备键盘键值的不同,需要调整代码中 相应的参数。 (3)南于手机不同的按键习惯,需要调整左右软键的 功能。 (4)由于手机设备对声音的支持不同,需要使用不同 的声音文件,以及不同的实现方法。 二、现有的移植方案 (一)逐一移植 通常进行移植工作的方法是针对每个具体的手机平 台逐一移植。这种方法首先从现有一款手机平台的源码 建立一个拷贝,制作符合目标机型屏幕尺寸的图片资源 并覆盖原有资源,再针对这个具体机型的特性修改相应 的代码,达到移植到该手机平台的目-的。这种方法最直 接,各机型版本的代码之间相对独立,互不影响,然而 随着手机型号的增多,这种方法将使得工程数目越来越 多,越来越难管理,并且当发现一个共性的BUG(不是 具体手机平台出现的BUG),将需要对每个工程逐一进行 修改、编泽、测试,这种方式将造成维护困难,工作量 大,并造成很多重复劳动,项目管理成本大大增加。 (二)避免差异 移植过程中的这些问题主要出现在用户界面、移动 设备支持的可选扩展API、M1DP1.0到MIDP2.0的变化 以及减容四个方面;而应用的主体结构和逻辑基本上不 会有太大的变化。如果能将应用中稳定的主体逻辑保留, 搭配不同的界面及扩展API,就可以解决移植过程中的 大部分问题。 (1)尽量避免使用提供的新的M IP2.0包和函数 比如用自定义的动画和场景模块代替javax、 microedition、lcdui、game.*等使用; (2)尽量避免使用厂商自己的扩展函数 厂商自己的扩展函数肯定更加易于实现特定的功能, 但是当游戏需要移植的时候,使用这些扩展函数可能是 不明智的。因为游戏要在其他的设备上实现相应的功能 http://www.sbs.edu.cn 就必须编写另外的函数来实现,这样从一开始就编写这 个函数就是最经济的了。 (3)对不同的实现进行统一的封装 在MIDP2.0规范发布之前,几乎每一个手机设备都 有自己的声音播放的扩展,来实现并不属于MIDP1.0规 范的声音播放。虽然MIDP2.0已经有了自己的MMAPI 多媒体包,但早期的大量的设备仍然还占据着广泛的市 场。我们可以自己定义一个封装好的Player类,统一接 口,根据设备的不同而采用不同的实现。 MIDP2.0规范较有了较大的改进,其中的游戏开发 包还提供了游戏开发的框架。因此,为了实现移植而放 弃使用这些新的功能是不可取的。 三、改进解决方案的探讨 其主要思想就是利用C语言的预处理命令来定义不 同手机设备造成的差异,用C/C++编译器预处理“源文 件”产生Java代码,然后再用Ant对预处理后的代码进 行编译和打包。这里的“源文件”其实是Java语句和C 预编译指令混合的文件。 (一)方案的框架结构 首先,需要将源代码进行调整,根据定义的参数的 值加入预编译指令,然后根据具体的机型定义,传递相 应的参数给gee编译器和Ant命令。最终,得到相应机型 的执行文件。 (二)引入预处理指令 C语言和C++语言有很好的解决跨平台问题的方法, 就是预处理指令。常见的预处理指令有include、ifdef、 endif、define等,我们可以将拆分的代码段放在头文件文 件,在源代码中间使用在预处理的时候载人这些代码段。 用define指令定义设备的属性,在源代码中结合ifdef、 endif指令将不同设备的代码段分开。 在移植的过程中,可以引入预处理机制。由于预处 理并不是Java语言的一部分,Java语言编译器并不支持 这样的指令。但是,C/C++编译器都支持预处理指令, 只要将编译器的语法检查、编译等功能关掉,只保留最 基本的预处理功能就可以了。 下面是使用预处理机制解决屏幕尺寸差异造成的移 植困难的关键代码: #ifdef Nok7210 #define scrwidth 128 —#define scrheight 96 #define set height full 1 28 #define key softkeyl--6 #define keysoftkey2--7 —#endif… 在以上代码中,将特定手机设备的屏幕宽度、高度、 左右软件键值等参数设定为预处理常量,在程序中,直 ・97・ 第11卷第1期 2010年1月 基于J2ME平台的手机游戏移植方法探讨 №.1 VoI.11 dan 2010 Transplanting Handset Games Using the J2ME Platform 接使用这些定义的常量,在用c编译器预编译以后,它 本来实现自动构建机制。这种机制进行如下处理,并最 们替换为相应的具体的值。如Nokia7210,预处理后 终生成版本。 scr—width ̄被替换为128。 (1)根据指定的设备名和版本语言,完成资源的查找 在改进方案中,目标机型的设备属性都定义成预处 和打包以及源代码的合并和预处理。这里使用配置文件 理常量并放在设备属性文件中,在具体的代码实现中须 文件定义一些属性,根据这些属性,自动构建脚本会找 包含进设备属性文件。 ・ 到相应的目录,将目录下的所有文件拷贝到临时目录, (三)项目资源组织 然后对资打包,对代码进行预处理。 为了降低代码的复杂度,用于不同设备的代码段都 (2)对预处理得到的代码进行编译,并完成代码的 有相同的文件名。不同的设备使用资源不一样,但却具 混淆。 有相同的名字。这些文件不可能同时存在于同一个目录 (3)自动生成Jad和Manifest等描述文件,并自动对 下,而应按照设备来对资源和代码进行分类,有助于我 其进行命名,包括设备名、语言名和版本号等。 们更清晰地管理项目资源,在多个平台平行开发的时候 (4)完成最终的版本发布工作。 共享代码和资源。 自动构建过程可以接受命令行的参数,构建指定的 简单举例,将游戏使用的所有资源都存放在/data目录 机型版本,同时还能根据参数调整构建过程,每一个子 下,根据设备屏幕分辨率,使用语言的不同划分为多个种 过程都可以根据需要跳过。 类。每种资源又可以分为图片、动画文件、声音和音效文 件、文字、脚本五类。每一种屏幕分辨率、每一种语言、每 参考文献: 一种设备的目录下都应该包括这五类文件中的几类。 [1]杨秋霞.基于j21v ̄,的手机游戏开发简介EJ].计算机时 (四)自动构建和发布 代,2005. 前面己经将资源和代码进行了合理的分类,管理的 [2]蒙梅.基于J2ME平台的手机网络PRG游戏的开发. 难度己经降低,代码和资源共享的程度也得到了提高。 1-3]雷剑.基于J2ME的手机游戏开发关键技术的研究与实现. 但是开发人员在进行调试和发布的过程中要得到打包后 E4]荣钦科技.游戏设计概论[M]jE京:科海电子出版社. 的资源和预处理过的代码很困难,而且极易出错,这就 [5]王勇.基于J2ME的手机游戏程序的几个实现技巧I-J].计算 需要一个自动化的处理来完成此项工作。使用批处理脚 机时代,2004. Transplanting Handset Games Using the J2ME Platform DONG Jiasu (School of Softzoare,Shanghai Jiaotong Unversity,Shanghai 200030,China; and Shanghai Commercial Accounting School,Shanghai 20001,,China) Abstract:J2ME is a prevalent technology and an important infrastructure development platform of wireless application. Moreover,J2ME theoretically provides an environment marked by“once written,everywhere applicable”.However,due to the lack of compatibility between different brands and types of mobile platforms,the same game can hardly run in a different mobile phone device.How to port applications to such a large number of mobile platforrns efficiently and effectively is also a major problem we have to face.This article analyzes the existing porting solution and tries to put forward more effective porting methods to improve the quality of the game and the efficiency of development. Key Words:J2M[E,handset game,transplant (责任编辑/王一凡) ・98・ http..//www.sbs.edu.cn