Java关键字导航
网络 J2ME 手机游戏 JavaCard Struts 游戏 分析器 JAAS EJB JavaMail 设计模式 J2EE
概要
手机游戏成绩斐然,成为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)通讯)有着非常大的差别。好的手机游戏应该利用那些更新的设备特征和网络基础设备的优点。
·无违法内容:既然所有年龄/性别的人群都玩手机游戏并且常常在公 1 2 3 4 : 手机的价值链
要完全理解手机游戏的前景,你必须理解资金是如何流动的。这种商业的价值链与传统游戏或者企业应用有着相当大的区别:
·开发者: 软件开发者通过创建伟大的应用驱动价值链。但是,大多数的开发者没有能力来处理巨大的营销问题。他们也缺乏到达消费者的分布式渠道。
·发行商: 游戏发行商收集来自开发者的论题。他们建立商标名,确保游戏的技术正确性,将游戏升级,并且建立与无线通信公司的商业关系。他们还站在开发者的立场上处理账目问题。并且它们一般都是与开发者 7
1 2 3 4 8 : 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()方法,为获得键状态提供了一个便利的途径。这使得复杂游戏屏幕类中的执行流动性要灵活的多。
MIDP v2规范为 javax.microedition.lcdui.game 软件包中的游戏应用程序定义了一个完整的API。除了GameCanvas类之外,他还提供了支持平铺或者动画游戏背景图片的Layer 类。游戏API也提供了处理动画图片和冲突的Sprite类。他们是2D图形游戏中的基本组件。在3D前沿,Java规范请求(JSR) 184 试图标准化手机上的Java 3D API 。它做出了极好的改进。开发者和艺术家需要的J2ME 3D工具现在在SuperScape (见 Resources)中可以得到。大型设备制造商在他们的高端智能手机设备上迅速的转变,以支持这种新API。
[img]/image20010518/117941.jpg[/img]
除了标准的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游戏提供了多种选择。
7
1 2 3 4 8 : 网络和后台集成
正如我前面提到的一样,手机游戏的未来就是联网的多玩家游戏。J2ME中的联网可通过一般连接框架(GCF)来获得支持。GCF的核心就是工厂类 javax.microedition.io.Connector。你可以传递一个协议和地址字符串到静态方法Connector.open()上,以便获得到远程主机上的连接对象:
·HTTP协议支持在MIDP中是强制性的。如果你传递http://hostname:port 连接字符串给Connector.open()方法,则返回 HttpConnection对象。你可以直接打开连接上的输入/输出数据流
您可能对 [Java] 的这些文章也感兴趣: