扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:佚名 来源:华软网 2007年9月1日
关键字:
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。
图2:从SuperScape获得的Java 3D游戏 |
除了标准的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。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者