人生本是一个不断学习的过程,在这个过程中,图老师就是你们的好帮手,下面分享的基于Java的移动游戏开发入门懂设计的网友们快点来了解吧!
【 tulaoshi.com - 编程语言 】
如果读者有Java编程经验,尤其是AWT和SWING的Java GUI开发经验将十分有助于理解本文,尽管不是必需的。
一、 引言
近来,移动游戏在提供个人娱乐方面变得越来越流行。这种流行使得移动游戏给手机用户,游戏出版商和手持设备制造者带来丰厚的利润;移动游戏,在给游戏开发者和相关人员带来无数商机的同时,处于极为重要的枢纽位置。据估计,到2009年,全世界的手机玩家有望达到两亿两千万之多,移动游戏业将被规划并扩展到一个更高层次,为手机用户和手持设备制造者带来更大的利润份额。
移动游戏可以分为三大类:
·嵌入式游戏:被硬编码到移动手持设备系统中的游戏,并随着设备一同发布。不久就会过时。例如:随着诺基亚手机一同发行的贪吃蛇游戏。
·SMS游戏:通过发送文本消息来玩的游戏-例如,把SMS消息发送到游戏服务器-该服务器处理这些SMS消息,然后再通过SMS消息形式发送回结果。经常是以在线竞赛和测验形式出现。并不很流行,因为游戏的费用将随着把每一个SMS发送到游戏服务器而逐步增加。
·浏览器游戏:这些游戏可以使用移动电话的内嵌微型浏览器(专用于移动设备的网络浏览器)来玩,在线或离线的方式都可以。玩家可以通过自己的手持设备或一个第三方游戏供给者的游戏Web站点的方式在线玩这样的游戏,或下载它们后离线玩。这一类游戏又有很多种类,例如单人或者多人游戏,网络游戏,离线游戏,街机游戏,等等。
在这三种类型中,浏览器游戏是今天最流行的移动游戏类型,这是因为它们具有创新性和丰富的多媒体内容,引人入胜的表达与SMS游戏相比的低价位优势。本文将重点讨论浏览器游戏开发。今后,术语"移动游戏"在本文专指"浏览器游戏"。
注意:本文集中于讨论2D游戏开发。因为今天流行的大部分的数字移动电话有很有限的资源(小的屏幕,有限的内存和图形支持,繁琐的键盘输入),所以时下最适合于这些设备的也是最具有商业可行性的游戏是2D游戏。但是,随着移动电话能力的不断提高,3D游戏在不久的将来将广为流行。
移动游戏可用C++,Java(J2ME),还有Qualcomm公司的Binary Runtime Environment for Wireless(BREW)平台来进行开发。
二、 为什么选择Java进行移动游戏开发?
尽管C++能够被编译成本机代码并且可以直接存取本机系统资源,以及与BREW(它允许开发者使用任何希望的语言,包括C++,Java,XML和Flash)相结合为移动游戏开发者提供端到端的解决方案,但是Java仍然是进行移动游戏开发的最流行的选择。Java,或更精确的说是Java 2微型版本(J2ME)平台,被认为是开发移动游戏的最方便的语言。(要更多地了解J2ME,请参考"What is Java 2 Micro Edition?")。J2ME如此流行的背后动力包括:
·J2ME遵循为大多数手持设备生产商所支持的工业标准,如今大多数的移动电话都支持Java开发。
·J2ME是一个自由的和开放的平台。这使得开发人员投资很少,但却提供给他们必需的灵活性以及大量的支持。
·它的高度可移植的特性("书写一次到处运行")保证一部为一个品牌/类型的手持设备开发的游戏应用程序,将可以工作在其它类型的支持Java的手持设备品牌/类型上。
·它特别为小型设备进行了优化,是轻量级的,高度安全的,因为在其上开发的应用程序不能存取或者影响运行在该手持设备上的其它应用程序。
J2ME包含移动信息设备轮廓(MIDP)API,它的设计是为专门开发包括手机在内的移动设备应用程序,但切记它们的局限性和约束条件。而且,最新的MIDP 2.0版自己提供了一套完整的API以用于游戏开发,这使得游戏开发更为简单和快捷。
现在,我们探索一下MIDP 2.0在移动游戏开发环境中的使用。
三、 MIDP2.0在游戏开发中的地位
MIDP2.0 API是一组具有特别性能的API,可用于开发安全的,内容丰富的多媒体应用软件,包括适合于移动设备的游戏程序。MIDP 2.0基于以前的MIDP 1.0之上并提供一个更好的开发平台以创建高效快速的移动设备应用程序。
MIDP 2.0进一步提炼了MIDP 1.0的特性和有关功能。有关这些新特性的信息请参考What’s New in MIDP 2.0。新增添到MIDP上的重要特点之一是Game API,或更精确地说是javax.microedition.lcdui.game API包。通过该Game API,MIDP 2.0提供给游戏开发者现成的程序模块,这些模块在早期的MIDP 1.0时是你必须从头开始创建的。这些模块以类的形式提供,用于创建和控制各种游戏元素,如游戏画布、精灵、层等等(后文将介绍)。这样,MIDP 2.0大大减少了游戏开发者的创作时间。
进行游戏开发必需的另外两个MIDP 2.0 API包,在本文中也作了探索,它们是javax.microedition.midlet和javax.microedition.lcdui。
javax.microedition.midlet API包是开发各种类型的移动应用程序的基础。它包含javax.microedition.midlet.MIDlet类,它是所有的基于J2ME的移动应用软件(或称为midlet)的基类,它必须由所有移动应用程序的main类加以扩展后使用。非常类似于java.applet.Applet类,MIDlet类提供创建midlet程序的必要的资源。
javax.microedition.lcdui API包是开发各种类型的移动应用程序的用户接口所必需的。这个API提供类来创建和控制UI部件(例如屏幕,表单,文本框,单选按钮,等等)并且处理包括游戏在内的移动应用程序的输入。有使用AWT和SWING GUI开发经验的开发者会发现javax.microedition.lcdui包中的元素非常相似于这些API中的元素。
我将在本文的示例游戏开发期间讨论这些API中的和游戏开发相关的元素。
四、 构建示例游戏
为了更好地理解这些API和它们各自的类,你最好动手开发一个简单的移动游戏。这里是一个单人的离线游戏,通过障碍物线路的驾车游戏。玩家使用左键和右键用于改变车的方向到左边或者右边以防止与障碍物的碰撞。游戏在发生碰撞并显示得分后结束。该游戏命名为HardDrive。
注意:虽然这个示例游戏是使用J2ME Wireless Toolkit 2.1_01和J2SE 1.4.2_07 SDK在Windows 2000平台上开发的,但是,其它版本的与另外一些平台相匹配的Wireless Toolkit和J2SE SDK也可以利用。
现在开始构建游戏程序HardDrive。从前一节中得知,你第一个需要开发的程序是HardDriveMIDlet(HardDriveMIDlet.java),它扩展了javax.microedition.midlet.MIDlet类。
(一) HardDriveMIDlet.java
列表1.1:该代码片断来自于文件HardDriveMIDlet.java import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;
public class HardDriveMIDlet extends MIDlet implements CommandListener {
... ... ... ... ... ... ... ...
HardDriveMIDlet还实现了javax.microedition.lcdui.CommandListener接口来接收命令事件,它们是在应用程序执行和处理期间产生的。当发出EXIT,CANCEL,BACK,OK,STOP以及类似的命令-这些命令通过使用软按钮(在移动电话屏幕附近的特殊的按钮,除了箭头键以外)产生并被HardDriveMIDlet的commandAction()方法所处理-时,这些命令事件发生。为了提高效率,可把这些命令添加到画布上去。
HardDriveMIDlet用作所有canvas的容器,这些canvas是一些描述可用于在移动设备屏幕上进行绘制的对象。这里,midlet包含了HardDriveCanvas,它扩展了javax.microedition.lcdui.game.GameCanvas类。GameCanvas是一个专门的画布,用于为游戏程序绘制有效的动画图像,还能够查询为实现平滑动画效果而采取的脱屏图像缓冲技术有关的关键状态。
HardDriveMIDlet包含的另外的一个canvas是GameOverCanvas,它扩展了javax.microedition.lcdui.Canvas类。Canvas是一个简单canvas,用于绘制文本,线段以及简单的形状等。当需要在屏幕上进行简单的绘制时-例如为显示游戏初启画面,游戏结束屏幕以及游戏指令屏幕-这个canvas被扩展,而取代了繁重的绘制。一个游戏程序的midlet可以包括任何个数的canvas,但是每次仅显示一个canvas,这是通过使用javax.microedition.lcdui.Display类的setCurrent()方法来实现的。
HardDriveMIDlet还包含3个另外的重要方法,也称作lifecycle方法。它们是startApp()、pauseApp()和destroyApp(),分别相应于该midlet的Active,Paused和Destroyed状态。在HardDriveMIDlet的startApp()方法中,实现实例化HardDriveCanvas并通过使用HardDriveCanvas类的方法addCommand()把EXIT命令添加到它上面去。
(二) HardDriveCanvas.java
HardDriveCanvas实现了一个java.lang.Runnable接口来使它自己可以运行在自己的线程中,这对于独立地执行游戏循环是必需的。该游戏循环被连续不断地执行,直到终止游戏的必备条件满足为止(在本例中,当汽车碰撞到障碍物上或者在任何时候当玩家使用Exit按钮退出游戏)。
列表1.2:文件HardDriveCanvas.java中的游戏循环 public void start()
{
gameRunning = true;
Thread gameThread = new Thread(this);
gameThread.start();
}
... ... ... ...
... ... ... ...
public void run()
{
Graphics g = getGraphics();
//... ... ...一些代码
while (gameRunning) //游戏循环
{
tick();
input();
render(g);
//... ... ...一些代码
try
{
Thread.sleep(timeStep );
//... ... ... ...一些代码
}
catch (InterruptedException ie) { stop(); }
}
列表1.2显示HardDriveCanvas.java中的游戏循环。这是一典型游戏循环,它包含了依次对tick(),input()和render()方法的调用。tick()方法检查是否停止该游戏的必需条件已经满足;如果满足
来源:http://www.tulaoshi.com/n/20160219/1599340.html
看过《基于Java的移动游戏开发入门》的人还看了以下文章 更多>>