概要
手机游戏成绩斐然,成为IT产业中增长最快的部分之一。在本文中,作者 Michael Yuan 为Java开发者着力分析了这个令人激动的新市场的特征和当前形势。Java 2 平台,微型版(J2ME)是用于新一代多玩家手机游戏的主要技术平台。在本文的后半部分,作者Michael 还概观了J2ME 世界里与游戏相关的最新的技术创新和最新的APIs。
纵观IT产业的历史,计算机游戏已经成为技术创新背后的动力之一。计算机游戏者渴望更加强大的硬件计算能力;渴望不受不同的软件的限制——无论是将图形强制在人工智能(AI)上 还是网络安全性。游戏开发者和玩家常常是前沿计算机技术的最早的采用者。由于他们的创新天性,游戏不再是由大型采购公司控制的技术产品——游戏领域总是有充足的空间给那些在这方面有天分的单个创新者。
随着技术对游戏经验的促进,游戏市场持续增长。商业IT革命为我们节省了时间和金钱,从而提高了我们的工作水平,我们因此花费更多的时间和金钱在游戏上,来改善生活的整体质量。甚至在当今困难的经济时代,游戏仍保持快速增长,他仍然是盈利行业的组成部分。Java开发者应该注意到这里蕴藏着的巨大的商机。
作为IT产业的剩余部分,游戏行业中最新的热点就是可移动性。手机游戏将来自传统商业公司(如Sun Microsystems 的新游戏区)、设备生产厂(如:Nokia的 N-Gage 和Qualcomm的 Brew 设备)、和网络经营者(如Vodafone 的内容服务)的那些原本不可能在一起的商家拉到了一起。
作为Java开发者,我们很适合进入这个可盈利的新行业部分因为Java 2 平台,微型版(J2ME)是最广泛支持手机游戏的平台之一。在本文中,我将站在Java 开发者的角度来讨论手机游戏的商机和面临的挑战。我也将概观重要的J2ME 规范中的艺术级的移动Java 技术。
手机游戏特征
手机游戏的盈利主要是由于它们的涉及面很广。手机已经与现代生活方式紧紧地结合在一起。他们是最普遍携带的个人用品中仅次于钥匙和钱包的东西。传统的台式机游戏将目标锁定在低级趣味的人和青少年身上,而手机游戏则每个人都可以访问的到——随时,随地。尽管每个手机游戏都不贵,但是巨大的使用量(如:每人每星期一个新游戏)将使得这个市场商机无限并且有利可图。但是,对于开发者来说,将控制台游戏迁移到手机游戏工程很大因为他们所面向的对象、生活方式和分布式模型都有着极大的区别。让我们从手机游戏的需求谈起吧。
需求
一个成功的手机游戏大多具有以下特征:
·易于学习: 既然手机游戏面向的是普通消费者而不是计算机高手,那么他们不可能深入的学习游戏技巧。消费者不会花几个小时去研究一个3美元的手动操作的游戏。所以游戏必须是一下载就可以玩的。保持游戏的简单是最基本的要求。
·可中断性: 多任务处理是手机生活方式的基本特征。手机用户常常在任务(如等一个电子邮件或者等车)之间有一小段时间。而游戏、日历管理、通讯和工作数据访问使用的是同一个设备。所以一个好的手机游戏应该提供短时间的娱乐功能,并且允许用户在游戏和工作模式之间顺利切换。
·基于订阅:手机游戏的盈利成功取决于他们巨大的使用量。一开始开发和设计每个游戏都是昂贵的。如果一个手机游戏开发者要赚钱的话,重要的是:同一个游戏引擎,多个标题,基本的故事情节类似。基于订阅的游戏是不断产生收入的最好方法。
·丰富的社会交互: 不管一个游戏设计得多好,只要玩家找到了它的根本模式或者玩完了所有的游戏路径很快就会厌烦这个游戏。对于一个基于订阅的游戏,重要的是与别的玩家合作以增强所玩游戏的智力和随机性。在今天纷繁复杂的多玩家游戏中具有丰富社会交互的游戏证明是成功的。
·利用手机技术的优点: 巨额的手机技术研发费用都花在提高设备和网络的可用性和可靠性上面。因此,手机设备硬件和网络协议与桌面/控制台世界(如全球定位系统(GPS)扩展、条形码扫描仪、和短消息服务(SMS)/多媒体信息服务(MMS)通讯)有着非常大的差别。好的手机游戏应该利用那些更新的设备特征和网络基础设备的优点。
·无违法内容:既然所有年龄/性别的人群都玩手机游戏并且常常在公共/工作场合,你应该避免明显的暴力或者色情内容。
手机游戏的类型
基于以上标准,最有可能成功的手机游戏就是那些临时小游戏,它可为广泛的玩家在所有的社交场合提供娱乐。特别是,下列类型的游戏将是明天最具有杀伤力的游戏:
·多玩家游戏: 这些游戏可以提供手机访问以便建立在线游戏团体。或者,他们利用手机专有特征如多媒体通讯和基于位置的服务,从而创建完全不同的社会结构。好的游戏设计和管理是这种类型游戏成功的关键。
·基于内容的游戏:这些游戏传送版权的多媒体内容,如名人的图片、视频片断、音频立体声、和私人的体育节目,给那些音乐/电影/体育迷们。它成功的关键就是提供值得订阅的高品质的内容流。
·高冲击的视频游戏:PC 和台式游戏已经从2D 进化到3D。手机游戏也会遵循这种趋势。现在已经出现手机3D工具箱和听筒。但是,3D是非常资源集中型的。他们要求开发者和图形设计者都是专家级的。专业的商店最有可能开发这些游戏。
在手机游戏的早期,大多数开发者都是想要玩转设备、学习技巧和快速攻关的狂热分子。但是,随着更多的开发者加入这个行业,手机游戏已经进化成涉及到专业设计师、构造师、开发者、产品经销商、律师、和艺术家在内的主导产品。这是行业走向成熟的必然趋势。尽管在某人的业余时间内要开发和推销简单的游戏更加困难,但是更多的专业商店将为许多人提供更多的就业机会。
手机的价值链
要完全理解手机游戏的前景,你必须理解资金是如何流动的。这种商业的价值链与传统游戏或者企业应用有着相当大的区别:
·开发者: 软件开发者通过创建伟大的应用驱动价值链。但是,大多数的开发者没有能力来处理巨大的营销问题。他们也缺乏到达消费者的分布式渠道。
·发行商: 游戏发行商收集来自开发者的论题。他们建立商标名,确保游戏的技术正确性,将游戏升级,并且建立与无线通信公司的商业关系。他们还站在开发者的立场上处理账目问题。并且它们一般都是与开发者共享收益。
·无线通信公司: 无线通信公司是手机游戏分布渠道的中心。通信公司不仅仅控制网络而且拥有客户信息。等于是他们决定支持哪种设备和服务。通信公司在全部收益中拿大头。他们也通过现有的服务协议向客户收款。
·无线设备制造商:设备生产商驱动技术更新。他们制造新的硬件并且支持开发平台。实际上,J2ME的成功主要归功于主要设备制造商对它的采用。设备制造商是通信公司和消费者之间的一股独立的势力。
·消费者: 消费者最终为成本和链中所有提供者的利润付款。消费者可从发行商的网站上购买游戏或者通过通信公司提供的内容供应系统购买游戏。
![](http://www.21tx.com/school/j2me/wz/37WUSAJ7ZZXG1NJCHS.jpg)
图1显示了这条价值链。
J2ME智能客户端
J2ME平台被认为是最杰出的手机游戏平台,它为开发者、设备制造商、网络通信公司和消费者广泛接受。它有一些非常重要的特征对所有组织都有益。
智能客户端的特征
J2ME 设备是智能的。他们可在自身上处理信息。区别J2ME智能手机与前几代手机最重要的特征有:
·对于用户来说,智能手机最吸引人的特征就是不总是处于网络连接状态也能玩游戏。在线模式在今天的2-2.5G 网络中是必要的。但是在该网络中,覆盖很少,而且数据通信昂贵。将数据和请求网络操作缓存到事务处理中也可显著的减少无线网络的使用并且提供应用的可靠性。
·智能客户端可以使用不同的协议将后台的游戏服务器及其同位体(包括无线同位体和因特网同位体)集成。
·智能客户端支持对视觉高冲击游戏至关重要的丰富的用户界面(UI)。
·智能客户端可以访问手机专用网络(如SMS和MMS)或者设备扩展(如GPS)特征。这使得开发完全利用手机生活方式的优点的游戏成为可能。
·智能客户端通过高级加密和数字签名算法提供更强大、更灵活的安全性。有了智能客户端,我们有可能在因特网上传递感性的私人数据以及建立有效的在线社会。
便携式平台
相对其他智能客户端平台而言,J2ME有一个独特的优点:它是专为手机设计的。J2ME应用可运行在不同投资商的不同设备上。这在高度竞争性的手机设备行业中是特别重要的,因为存在大量的不同设备。所有主要的智能手机制造商都承认支持J2ME平台。代码的可携带性对于那些想要维持单一代码库的消费者的数目不断扩大的开发者来说是至关重要的。
J2ME解决了“最低公共统治者”的问题,这个问题以前一直困扰着桌面Java。J2ME通过定义一个包括配置、配置文件和可选软件包在内的多层结构解决了这个问题。迄今为止,在手机游戏行业中,最流行的J2ME平台是手机平台设备配置文件(MIDP)和在MIDP之上建立的可选软件包。在本文中,我重点讨论MIDP V2平台。
![](http://www.21tx.com/school/j2me/wz/37WUSAIRZZXE1NJCHS.jpg)
图 2显示J2ME结构。
因为J2ME应用在不同设备上都是便携式的,他们常常可在网络上下载和执行。如果没有正确的防范,它则为用户和无线通信公司冒着无数个安全的风险。幸运的是,Java被设计成一种安全的语言。所有字节码应用在执行之前都要校验;JVM在执行过程中监督应用的安全性和存储违反问题。MIDP v2 运行时间包括一个完全特征化的、基于域的安全管理员,它在应用的数字签名者鉴别的基础上赋予应用API级许可。
由于J2ME的广泛使用,手机Java开发者已经成长为一个相当大的市场。几乎所有流行的Java开发工具都已经改造得适合于J2ME开发者的需要。来自第三组织提供者的J2ME库和组件容易得到。那些库中的许多库提供针对于它们的Java2平台标准版(J2SE)对应物的类似的特征。例如:IBM服务管理框架(SMF)支持PDAs 上的Java servlets; PointBase 微型版提供的用于手机相关数据库的方法类似于Java数据库连接(JDBC)的方法; IAIK JCE-ME支持Java密码技术扩展(JCE)的轻型版。这些工具和库使得J2SE 开发者移植技术到手机行业中比较容易。相应的,他也为J2ME投资商提供了大量的开发者来源。这种良性循环将有助于J2ME的成长。
APIs和工具的概观
接下来的部分,我将概观J2ME与游戏相关的API并且测试他们提供给开发者的功能。
用户界面
MIDP 运行时间提供了对手机设备的屏幕和硬件键的细粒度控制。所有的MIDP UI类都是从 javax.microedition.Displayable接口上继承而来:
·Screen类是用于高级小器件如Alert, List, Form, 和 TextBox的基础。MIDP 运行时间控制如何显示那些高级UI类以及如何在特殊设备的UI惯例的基础之上安排功能键。MIDP 高级UI小器件最适合用于文本控制。在高级UI 类中,Form 类是最灵活的。你可以指定 Form屏幕的布局并且可以给它添加一些东西如:StringItem, TextField, DateField, ChoiceGroup, 和 Gauge。
MIDP v2 规范将两个重要的创新带进了高级UI中:首先,它引入Spacer 和ImageItem 项,从而允许同一个Form 上的混合文本和图像显示;其次,他引入CustomItem 类,从而为开发者提供了设计和实现自己的项级别的窗口小器件的机制。开发者对CustomItem 对象,包括像素级别的绘画和内部事件处理在内,拥有最终控制权。
·Canvas类是低级别MIDP UI的基础。它提供对在整个屏幕之上的像素级绘画的访问以及对用于所有硬件键的自定义映射的访问。你可以只创建Canvas的子类并且跳过用于显示逻辑的paint()方法;用于键事件的 keyPressed(), keyRepeated(), 和keyReleased()方法;以及用于每个事件中指示器和触摸屏的pointerPressed(), pointerDragged()和 pointerReleased()方法。
·GameCanvas 类继承于Canvas类。他是MIDP v2 游戏API的一部分并且为游戏开发提供了便利机制。例如:在GameCanvas子类中,每次你修改时不需要跳过paint() 方法就可以描绘整个屏幕。你可直接从getGraphics()方法中得到Graphics 对象并且在该对象上绘图。当你需要更新显示时,你可以调用flushGraphics()方法。但是 你使用flushGraphics()方法只可以更新屏幕的一部分。相比Canvas 类的单一方法而言,GameCanvas类使得我们易于保持图形状态,易于迅速更新屏幕的动画部分。类似的, GameCanvas 类使用和Canvas 类中回叫方法相反的getKeyStates()方法,为获得键状态提供了一个便利的途径。这使得复杂游戏屏幕类中的执行流动性要灵活的多。
![](http://www.21tx.com/school/j2me/wz/37WUSAFLZZX41NJCHS.jpg)
图 3显示MIDP UI结构。
MIDP v2规范为 javax.microedition.lcdui.game 软件包中的游戏应用程序定义了一个完整的API。除了GameCanvas类之外,他还提供了支持平铺或者动画游戏背景图片的Layer 类。游戏API也提供了处理动画图片和冲突的Sprite类。他们是2D图形游戏中的基本组件。在3D前沿,Java规范请求(JSR) 184 试图标准化手机上的Java 3D API 。它做出了极好的改进。开发者和艺术家需要的J2ME 3D工具现在在SuperScape (见 Resources)中可以得到。大型设备制造商在他们的高端智能手机设备上迅速的转变,以支持这种新API。
![](http://www.21tx.com/school/j2me/wz/37WUSAEVZZX21NJCHS.jpg)
图 4显示了SuperScape的Java 3D游戏中一些镜头。
Figure 4. Java 3D games available from SuperScape
除了标准的MIDP UI 和游戏APIs之外,也存在几种其它的MIDP UI工具箱。他们要么提供设备的专有功能,要么旨在支持更好的可促进游戏开发的高级UI:
·Nokia UI 软件包提供对Nokia 手机上的声音、亮度和振动组件的控制。它也支持用于更加专业级的游戏的全屏模式。
·Motorola 轻型小器件工具箱(LWT) 是一个独立的用于Motorola 手机的窗口工具箱。
·Nextel Open Windowing Toolkit (OWT)是Motorola和Nextel联合开发的开源工具箱。 它运转一个容器模型来控制布局和其他UI组件,这是桌面UI开发者所熟悉的。OWT基于Canvas类并且运行在所有的MIDP手机上。但是,如果你使用OWT库,你必须将它包括在你的分布式MIDlet组中。
·Synclast UI 项目开发了一个支持容器模型的开源UI软件包。在MIDP v1 Canvas 类的基础上,他支持许多MIDP v2小器件。因此,它允许MIDP v2应用做一点小小的修改之后运行在今天的MIDP v1设备上。有了OWT,你必须将Synclast库捆绑在分布式应用中。
总的来说,MIDP平台为丰富的UI游戏提供了多种选择。
网络和后台集成
正如我前面提到的一样,手机游戏的未来就是联网的多玩家游戏。J2ME中的联网可通过一般连接框架(GCF)来获得支持。GCF的核心就是工厂类 javax.microedition.io.Connector。你可以传递一个协议和地址字符串到静态方法Connector.open()上,以便获得到远程主机上的连接对象:
·HTTP协议支持在MIDP中是强制性的。如果你传递http://hostname:port 连接字符串给Connector.open()方法,则返回 HttpConnection对象。你可以直接打开连接上的输入/输出数据流并且编写/接收到远程主机/来自远程主机的数据。
·Unix插座,用户自寻址协议(UDP) 连接、或者直接TCP/IP连接在某些实现中也得到支持。但是,你应该注意到手机网络与有线因特网有着根本区别。有些网络在HTTP层的开头模拟插座连接。所以,直接插座没必要出现在性能增加上。对于多数场合我推荐使用HTTP。
·J2ME无线通讯API (WMA)支持GCF中手提设备之间的SMS通讯。你可以通过sms://phone_number:port获得的MessageConnection对象发送SMS信息 给另一个手机。你也可以打开一个“服务器” 连接,该连接可使用sms://port 字符串听取到来的SMS信息。到来的SMS信息可以同步处理也可以异步护理。
·在 MIDP v2中,“服务器”SMS 连接可使用J2ME运行时间管理的推动注册进行注册。它允许开发者调用某个信息到达者之上的信息处理MIDlet。
在协议级别之上,J2ME支持传递结构化应用数据的几种方法:
·MIDP DataInputStream和 DataOutputStream 类支持 Java的便利 I/O 方法 (如 writeInt(), writeUTF(), writeFully()等等以及相应的readXXX()方法)(非)串行化普通的数据值和对象。在通讯通道的两边都使用成对的writeXXX() 和readXXX()方法可大大的简化开发者的工作并且增加终端对终端应用的强度。
·如果你需要更多结构化的数据交换的话,MIDP平台也支持几种XML解析器。XML 解析器支持用于XML(SAX)、XmlPull 、和解析范例的轻型文档对象模型(DOM)的简单API(SI)。JSR 172 (J2ME Web 服务规范)正在开发一种用于J2ME的标准XML解析器API。
·基于简单对象访问协议(SOAP)的Web服务是未来终端对终端的集成模式。J2ME 平台设置得很好,可通过第三组织工具箱如kSOAP (见Resources)以及标准API如JSR 172来支持SOAP信息交换。
数据管理
在设备上的数据管理是智能客户端游戏中的核心特征。J2ME强烈支持该领域:
·MIDP 上的标准数据持久性设备就是记录存储管理系统(RMS)。RMS 存储线性记录中的二进制数据(字节排列)。它不允许随机存储也不支持任何分层的数据结构。但是它提供搜索存储和对搜索结果排序的限制性功能。RMS在所有MIDP设备中是强制性的。它对于大多数用途来说已经足够了。但是,MIDP自身并不提供使用后台应用程序同步RMS数据的API。JSR 230 (数据同步API)刚刚起步开发这种同步的API。
·JSR 75 (用于J2ME的PDA可选软件包)提供对设备本地的协议独立多点传送(PIM)应用(如:日历、地址薄、电子信函和任务列表)和文件系统的访问。 PIM 数据和文件可通过设备的本地同步设备组同步到台式计算机上。
·至于更加复杂的数据,你可以使用手机数据库。几种商用MIDP数据库(包括相关数据库和面向对象的数据库)和同步引擎在MIDP平台上都可以得到(见 "High-Availability Mobile Applications" (JavaWorld, June 2003))。
多媒体
多媒体重放功能在内容驱动的手机娱乐应用中至关重要。J2ME 多媒体 API (JSR 135) 是J2ME中用于播放多媒体内容的标准框架。通过Player接口,它可播放来自多种数据源的多种音频和视频格式。在运行时间内传递给玩家的多用途的网际邮件扩充协议(MIME)类型 可指定内容格式。多媒体API的每种设备实现都支持依赖于硬件和本地玩家功能的一组不同的MIME类型。目前,几乎所有的与多媒体API兼容的设备都支持简单的立体声回放。 对更加成熟的格式如MP3音频和3GPP视频甚至是MPEG4视频的支持也快要出来了。
安全性
手机游戏涉及到可下载的代码、版权内容和财务往来。安全性对于维护用户、开发者、发行商和通讯公司的利益都至关重要。在多玩家游戏中有些用户试图通过炸开安全性的突破口攻进系统,这时安全性显得尤为重要。J2ME 对应用程序和通讯两者的安全性都提供了极好的支持:
·MIDP v2 规范支持使用开发者或者发行人的数字证明书的应用程序标记。基于签名者的鉴定(安全性领域),运行时间安全性管理者可赋予应用程序API级的访问权。例如,来源信任度较小的应用不允许实现网络连接或者发送SMS信息。
·MIDP v2 规范也要求支持所有手机上的HTTP。这为因特网上的安全信息交换提供了基础。
· 如果基于连接的HTTP对于某些应用来说仍然不够灵活,许多第三组织的密码技术软件包在MIDP平台上也有 (见"Data Security in Mobile Java Applications" (JavaWorld, December 2002))。它们允许信息二进制片断的加密或者签名。
·JSR 177 (用于J2ME的安全性和信任 API) 是标准化到被嵌入设备中的硬件安全单元(如订户识别模块(SIM)卡)的访问。例如:它允许J2ME开发者检索存储在SIM卡上的数字证明书或者使用加速硬件的加密算法。
供应和营销
手机游戏传送到消费者手中是一个涉及许多组织的复杂过程。MIDP 规范包括有关over-the-air (OTA) 供应的部分。它描绘了如何在无线应用协议(WAP)网络之上下载MIDP游戏,以及Java应用管理软件(AMS)应该如何安装应用程序并且使他为用户所用。 OTA过程为客户端设备报告安装状态给服务器提供了一个反馈机制。它为更加复杂的商业配置过程提供了技术基础。在商业领域内,你应该考虑以下几个重要的附加过程:
·应用必须被鉴定为防病毒状态并且放进通信公司支持的目录内。
·不同客户端设备应同时提供不同的JAR文件,该文件可最大化使用设备的功能(图形和安装的可选软件包)。
·客户的付款和给开发者的付款必须无缝处理。直接点击的手机内的付款系统是特别重要的。
几个商业供应方案对于通信公司和发行商来说已经可行。JSR 124 (Java 2 平台企业版 (J2EE)客户端供应规范)试图通过为客户端配置定义一个通用的J2EE框架来标准化那些方案。用于不同OTA规范、客户跟踪模式和付款服务的插入程序已经得到开发和设计,并可在框架内同时工作。这种成就对于J2ME游戏的商业成功也是非常关键的。
![](http://www.21tx.com/school/j2me/wz/37WUSAEKZZX11NJCHS.jpg)
图 5显示了J2EE客户端供应规范结构。
运行游戏
在本文中,我阐释了为什么带有随机内容的多玩家手机游戏是游戏行业的未来。手机设备制造商也看到了这个巨大的商机并且已经推动设备专为手机游戏而设计(如 Nokia N-Gage). J2ME/MIDP 是用于那些手机游戏设备和智能手机的最重要的技术平台之一。在读完全文后,你应该理解手机游戏中J2ME的优势和弱点。另外,我还介绍了MIDP V2中与游戏相关的关键性的技术革新以及它的可选软件包。
关于作者
Michael Yuan 著有Enterprise J2ME一书。他频繁的在J2ME、J2EE和手机企业应用方面写稿和演讲。目前,他领导一群人为Nokia开发平台建立应用蓝图系列。