开发基于JAVA语言的手机游戏(一)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
... ... ... ... ... ... ... ...
HardDriveMIDlet 也执行 javax.microedition.lcdui.CommandListener Interface 来接收应用程序执行和处理 它们时所产生的命令事件。该命令事件在像 EXIT, CANCEL, BACK, OK, STOP 这些命令和使用 soft buttons(在手 机屏幕附近的特殊按钮,像箭头的键)所提出的命令时发生的并且被 HardDriveMIDlet 的 commandAction( ) 方法所处理。为了更有效率,命令应该被加进 canvas 中。 HardDriveMIDlet 像一个容器服务于所有 canvases,它是表现出一个平面供在手机屏幕上画画。这里 midlet 包括 HardDriveCanvas, 可以扩展 javax.microedition.lcdui.game.GameCanvas class。GameCanvas 是一个特殊 的 canvas 意味着为游戏程序制定高效率的动画。
HardDriveMIDlet 还包括了三个重要的方法,也叫做 lifecycle methods。它们是 startApp(), pauseApp()和 destroyApp( ), 对应的是 midlet 的 Active, Paused 和 Destroyed 状态。在 HardDriveMIDlet 的 startApp( )方法中, HardDriveCanvas 是实例并且通过使用 HardDriveCanvas.的 addCommand( ) 方法把 EXIT 命令添加到它的里面。
HardDriveCanvas.java (Download)
HardDriveCanvas 实现了一个 java.lang.Runnable 接口使它本身运行在自己的线程上,这是独立执行 game loop 所必要的。Game loop 不段的被执行去运行游戏直到停止游戏的条件实现(在这个例子中,当汽车撞到 障碍时或是玩家用 Exit 键随处推出游戏时)。
MIDP2.0 进一步完善了 MIDP1.0 的功能和特征。关于新的特征,参见 What's New in MIDP 2.0.。对 MIDP 最重要的补充是 Game API,或是更准确的说是 javax.microedition.lcdui.game API 包。通过 Game API, MIDP2.0 为游戏开发者提供了从 MIDP1.0 从无到有的开发的基石。这些基石被创建和控制各种游戏要素如游戏画布, 精神和层次等等分了类。因 此,MIDP2.0 大大降低了游戏开发的时间。
MIDP 2.0 API 是用于开发安全的,内容丰富的多媒体应用程序,包括移动设备游戏的一套功能加载的
APIs。 MIDP 2.0 是建立在它的前身 MIDP 1.0 基础上的,为创建有效率的快速的移动应用程序提供了更好的 开发平台。关于 MIDP2.0 更多的信息,参见本文最后的 Resources。
... ... ... ...
public void run()
{
Graphics g = getGraphics();
//... ... ...some code
while (gameRunning) //The game loop
{
tick();
input();
render(g);
//... ... ...some code
另外两个游戏开发必不可少的 MIDP 2.0 API 包,本文也有探究,它们是 javax.microedition.midlet 和 javax.microedition.lcdui.。
javax.microedition.midlet API 包 提 供 了 所 有 移 动 应 用 程 序 的 开 发 基 础 。 它 包 括 javax.microedition.midlet.MIDlet class, 是所有基于 J2ME 移动应用程序类(也被称作 midlets)中的基础类并且 通过所有移动应用程序的类来进行扩展。非常类似 java.applet.Applet class,MIDlet class 提供必要的资源去 创建 midlets.
注意:这个实例游戏开发在 Windows 2000 平台上使用 J2ME Wireless Toolkit 2.1_01 和 J2SE 1.4.2_07 SDK。 其他兼容各种平台的 Wireless Toolkit 和 J2SE SDK 版本也可以。
把源代码放在一起来开始创建游戏程序,叫它 HardDrive。从上一节所探讨的,首先你需要开发的是 HardDriveMIDlet (HardDriveMIDlet.java)扩展 javax.microedition.midlet.MIDlet class。
Listing 1.2: Game loop of HardDriveCanvas.java public void start()
{
gameRunning = true;
Thread gameThread = new Thread(this);
gameThread.start();
}
... ... ... ...
我将要探讨有关游戏开发的这些 APIs 的要素,当在实例游戏开发的时候遇到他们。
创建实例游戏
为了更好的了解 APIs 和他们各自的类别,你将要开始开发一个简单的手机游戏。这将是一个单人的脱 机游戏,一辆汽车穿过障碍。玩家使用手机上左右键来“驾驶”正在运行的汽车,用 左键或右键来控制汽车 避免撞到障碍物。当撞到障碍物时游戏结束并显示分数。我叫它 HardDrive.
try
{
Thread.sleep(timeStep );
//... ... ... ...some code
}
catch (InterruptedException ie) { stop(); }
} Listing 1.2 展示了 HardDriveCanvas.java.的 game loop。这是典型的 game loop 由访问下列顺序的方法 tick( ), input( ), and render( )所组成。The tick( )方法是检查条件是否有必要去停止游戏并且改变 游戏状态如果可以的话。方法 input( )是处理 game key(分配给游戏的键)输入和执行每一个按键必要的动 作,例如游戏里的元素移动。通过 render( )方法来处理游戏的呈现。
作者: Sunny, 出处:IT 专家网, 责任编辑: 包春林, 2009-04-28 11:30
为了更好的理解本文,一些 Java 编程经验是十分必要的。AWT 和 SWING 的 GUI 开发经验是很有益的, 但也不是强制性的。
最近几年,手机游戏作为个人娱乐项目已经普遍流行起来。手机游戏的火爆程度在移动运营商,游戏 开发商和手机制造商的创收中占有举足轻重 的地位,同时也为游戏开发者和相关专业人员提供了大量的机 会。随着世界各地手机游戏玩家的数量的急速增加,手机游戏业务也会扩大到更高的水平并且成为构成移 动运营商和手机制造商利润饼图中的很大一部分。
手机游戏可以分成三类: · 嵌入式游戏(Embedded games): 是内嵌在手机系统中自带的游戏。不久就过时了。如所有 Nokia 手 机中自带的贪吃蛇游戏。 · SMS 游戏(SMS games): 通过发送短信来玩的游戏。例如,SMS 到游戏服务器——加以处理后在通过 SMS 反馈结果。常见的形式有现场比赛和投票。这个游戏不是很受欢迎因为会增加费用,当每次 SMS 发送 到游戏服务器的时候。 · 浏览器游戏(Browser games):这些游戏是通过手机内置的 microbrowser(移动设备的网络浏览器) 来操作的,在联机或是脱机状态下进行。玩家可以在联网的状态下通过手机运营商的或是第三方游戏供应 商的游戏网站来玩这些游戏,也可以下载下来在脱机的情况下玩。这一类包括很广的游戏范围,如单人或 是多人游戏,网络游戏,脱机游戏,街机游戏等等。 在这三类游戏当中,浏览器游戏是今天比较流行的手机游戏类型,因为它们有创新的丰富的多媒体内 容,吸引人的表现形式,而且和 SMS 游戏相比费用也很低。本文主要是讨论浏览器游戏的开发,在本文中 所提到的“手机游戏”都是指“浏览器游戏”。 注意:本文侧重于 2D 游戏。因为现在在市面上流通的大量手机的资源都非常有限(很小的屏幕,有限 制的内存和显卡支持,繁琐的按键输入),所以这些设备最适合的也是商业上可行的游戏就是 2D 游戏了。 但是,手机功能必然会随着时间的发展而增加,3D 游戏在未来就会实现。 手机游戏也可以使用 C++, Java(Java2 Micro Edition 更准确)来开发,高通的平台 Binary Runtime Environment for Wireless (BREW) platform。 为什么选择 Java 语言作为手机游戏的开发? 虽然 C++的优势在于用直接访问系统资源的方式编译到本地代码,并且以 BREW 平台提供端对端的解决 方案给手机游戏开发者,同时允许他们用任何 设计语言(包括 C++,Java,XML 和 Flas),Java 是游戏开发最 流行的选择。Java, 更准确的说是 Java 2 Micro Edition (J2ME), 被定义为手机游戏开发最方便的语言。 (关于 J2ME,见"What is Java 2 Micro Edition?)。J2ME’s 受欢迎程度的动力是: · J2ME 享有所有主要手机制造商支持的行业标准的地位,因为现今大多数手机都使用 Java 的功能。 · J2ME 是一个自由开放式平台。这个可以降低开发成本并且提供提供了必要的灵活性使开发者能自 由的使用它。 · 它高度的便利性("Write once run anywhere")确保为一个手机品牌/类型写入的游戏应用程序都能 工作于其他支持 Java 的手机品牌/类型。 · 它特别适用于小的重量轻的设备而且非常安全,因为在它上面写入的应用程序不能访问或影响其他 运行于手机/设备上的应用程序。 · J2ME 由 Mobile Information Device Profile (MIDP) API 组成,它是为移动设备包括手机的应用 程序开发而特别设计的,牢记它们的限制和约束。此外,最新的 MIDP version 2.0 致力于游戏开发的整个 API,使游戏开发更简单快捷。 MIDP2.0 在游戏开发中的作用
javax.microedition.lcdui API 包对于开发一个所有移动应用程类型的用户界面是十分必要的。这个 API 提 供了很多类去创建并控制 UI 模块(如屏幕,表格,文本框,收音机按钮等等) 并且为移动应用程序包括游戏 处理输入。有 AWT 和 SWING 的 GUI 开发经验的开发者们将会发现 javax.microedition.lcdui 包的要素类似于 APIs 的要素。
HardDriveMIDlet.java (Download) Listing 1.1: 来自 HardDriveMIDlet.java 的代码段
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;
public class HardDriveMIDlet extends MIDlet implements CommandListen百度文库r {
另外一个 canvas 是 HardDriveMIDlet 包括的 GameOverCanvas,扩展 javax.microedition.lcdui.Canvas class。 Canvas 是一个简单的画布来画文本,行和简单的图形。当需要在屏幕上画画时 canvas 就被延展了,代替复 杂的图形。例如,要显示启动画 面,游戏结束画面和游戏指南。一个游戏程序的 midlet 可能包括很多 canvas, 但是只有一个 canvas 通过使用 javax.microedition.lcdui.Display class 的 setCurrent()方法被随时显示。