(论文)J2ME论文(2013年优秀毕业设计论文)_第1页
(论文)J2ME论文(2013年优秀毕业设计论文)_第2页
(论文)J2ME论文(2013年优秀毕业设计论文)_第3页
(论文)J2ME论文(2013年优秀毕业设计论文)_第4页
(论文)J2ME论文(2013年优秀毕业设计论文)_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目 录第1章 绪 论1第2章 J2ME技术概览22.1 J2ME的概念22.2 J2ME简介22.2.1 J2ME架构32.2.2 JVM ( 虚拟机 )32.2.3 MIDP( 移动信息设备简表 )42.3 手机游戏的发展52.3.1 目前国内的发展情况52.3.2 目前国际的发展情况6第3章 游戏设计的需求分析93.1 MIDP中的游戏API93.2 游戏类构成93.2.1 Boxer类的实现103.2.2 GameCanvas类的功能及特点103.2.3 Sprite类的功能及特点113.3游戏角色的处理113.4 游戏中的事件处理123.4.1 key Pressed方法123.4.2 key Released方法13第4章 “Pocket Boxing”手机游戏开发制作144.1 游戏编程144.2 格斗类手机游戏实例144.2.1 “Pocket Boxing”游戏背景介绍及开发环境144.2.2 MIDlet的构成154.2.3 MIDlet的生命周期164.2.4 MIDlet的画面显示基础164.2.5 游戏项目的创建184.2.6 命令种类及命令处理194.2.7 游戏中的描绘处理214.2.8 游戏状态的类变量234.2.9 按键事件的处理244.2.10 设计存在的难点25第5章 手机游戏开发过程中的困难265.1 手机游戏开发存在的困难265.1.1 移动开发存在的问题275.1.2 操作环境不兼容性问题275.1.3 显示速度方面的问题285.1.4 不同的屏幕尺寸问题285.1.5 输入问题295.2 解决方案29第6章 J2ME手机游戏前景展望316.1 J2ME手机游戏的优势316.2 J2ME手机游戏的开发意义32第7章 结 论35致 谢36参考文献37英文资料翻译38-21-摘 要JAVA已经从一种平台无关的编程语言演变成一种与厂商及平台无关的健壮的服务器端技术,促使IT业界深入发掘以Web为核心的应用程序的巨大潜力。J2ME 的出现使这一变化达到了一种新的高度。J2ME,简称Java2平台袖珍版( Java 2 Platform ,Micro Edition (J2ME) ),是SUN公司在J2SE和J2EE之后,致力于消费产品和嵌入式设备的最佳解决方案。作为JAVA的三个版本之一,J2ME在无线编程技术中正发挥着它独特的作用。J2ME为在小型电子设备上创建性能卓越的网络应用提供了一套完整的解决方案。它也使设备制造商、服务提供商及应用开发人员为他们的用户发布新的软件应用成为可能。本篇论文共分为七个部分:包括绪论、J2ME技术概览、游戏设计的需求分析、“Pocket Boxing”手机游戏开发制作、手机游戏开发存在的困难、J2ME手机游戏前景展望和结论。其中第四部分“Pocket Boxing手机游戏开发制作”是本篇论文的重点。整篇论文都是围绕着这一部分来展开论述的,在这一部分里详细介绍一款手机游戏“Pocket Boxing”的开发全过程和开发过程中存在的疑难问题。其中包括:游戏事件、游戏API等以及对事件的处理,另外在游戏描绘处理部分也将作为重点进行介绍。通过对J2ME的详细介绍我们可以从中了解到其自身的作用,近年来,随着JAVA手机的诞生,其无可替代的灵活性与轻便性致使JAVA手机游戏成为游戏市场的又一亮点,它的前景无可限量,必将在我们以后的生活中发挥着重要的作用。关键字:J2ME, MIDP, 游戏编程, 事件, 描绘处理二、J2ME概览2.1 J2ME的概念J2ME的全称是Java2 Micro Edition (J2ME)Java2技术微型版,与J2SE、J2EE一样都是有美国SUN微系统公司提出的JAVA技术规范。2.2 J2ME简介J2ME是为了能够开发运行在小型设备、独立设备、互联移动设备、嵌入式设备上的JAVA应用程序而被提出的。J2ME是建立在一个由概要描述、配置、JAVA虚拟机和操作系统等部分组成的标准架构之上的,这些内容共同组成了完整的J2ME实时运行环境。它的技术核心是由一个JAVA虚拟机( JVM )及一套适合运行在上述设备环境上的API接口构成。J2ME在1999年的JavaOne开发人员大会上初次亮相,它的目标是面向智能无线设备和小型计算设备的开发人员,这些开发人员需要在他们的产品中整合跨平台的能力。无线设备和小型计算设备的消费者期望这些设备能够有较高的性能。他们希望小型计算设备有快速的响应时间,与同种设备相兼容,拥有功能完备的应用程序。消费者希望桌面计算机和笔记本电脑上的软件和功能同样能够运行在移动电话和个人数字助理上。为了满足他们的需求,开发人员必须重新考虑他们设计计算机系统的方式。开发人员需要利用商业计算机上现有的前端和后端软件的计算能力,并将这些能力传递到微型、移动和无线的计算设备上。J2ME能够以最小的修改来实现这种传递,如果应用程序的设计是可伸缩的,应用程序就可以适应小型计算设备上有限的资源。J2ME为在小型电子设备上创建性能卓越的网络应用提供了一套完整的解决方案,能很好的解决软件跨平台的兼容性和安全性的问题。52.2.1 J2ME架构J2ME架构的模块化设计使应用程序可以灵活适应小型计算设备的限制。J2ME架构没有替代小型计算设备的操作系统。相反,J2ME架构由位于原生操作系统之上的多层软件组成,这些软件共同称为“连接有限设备配置”(Connected Limited Device Configuration, CLDC)。安装在操作系统之上的CLDC形成了小型计算设备的运行时环境。J2ME架构由3个软件层组成:第一层是包括在内的配置层,这个层次直接与原生操作系统进行交互。配置层还处理profile和JVM之间的交互。第二层是profile层,由小型计算设备的应用程序编程接口(API)的最小集合组成。第三层是Mobile Information Device Profile( MIDP )层。MIDP层由用户网络连接、永久存储和用户界面的java API组成。它还能够访问CLDC库和MIDP库。2.2.2 MIDP( 移动信息设备简表 )MIDP是专门为互联受限设备配置设计的,它为移动设备提供了一套API集合,MIDP包含用户界面类、持久存储功能与网络功能。它同时也包括一个供用户下载新应用到终端设备的标准运行环境。运行在MIDP下的小应用程序叫做MIDlet移动设备小应用程序,它与Applet类似。MIDP要求平台设备提供一个机制用来存储简单的数据记录,通过正常的平台事件,比如重新启动和电池更新维护系统的完整性。MIDP是在CLDC的功能上附加提供适合目标设备用的GUI与事件处理功能。这样一来,就可以当成MIDP应用程序(MIDlet)来运行了。MIDP由于是由多个企业所共同策划出来的开放标准,因此主要的移动电话制造商也会制造出大量的对应机种。也就是说,以MIDP为基准所制作出来的应用程序,也将可以在流通于市面上的移动电话上执行。另外,MIDP不仅限于移动电话,也已经被移植到PDA Palm OS上,而以MIDP for Palm OS的名字来称呼(与KJava是不同的)。在不使用各电信商的扩展API的时候,制作给移动电话用的MIDlet也将可以使用在Palm OS上面。由于未来MIDP也将会搭载到不同设备之上,也由于其兼容性高,只要写过一次程序,就可以在其他移动电话或是移动电话以外的设备上执行;而这也就是它最大的好处。 2.2.3优势: 1、庞大的潜在用户群,现在全球超过十亿部移动电话正在被使用,并且这个数目正在逐渐增加。 2、便携性 人们可以随时随地玩他们选择的游戏,人们基本上是随时随地都把它们带在身边。 3、开发门槛低没有大的开发团队,没有高的资金预算,没有长的开发周期,有游戏平台的开放性标准。2.2.4缺点:1、屏幕小 你面对的是小型的屏幕。虽然屏幕分辨率持续提高,并且彩屏即将成为标准,但是屏幕尺寸还是一直很小。 2、有限的颜色和声音支持 大部分使用者手中的手机仍然是黑白的,虽然现在出售的支持Java的手机大部分都是彩屏手机。在这些手机中12bit彩色非常流行。即使手机本来就有声音设备,但是应用程序播放声音的能力却非常有限。J2ME规范根本不需要硬件厂商支持声音,虽然基本的Java手机允许使用一些声音并且MIDI支持正在成为标准。通常,手机中只有一个语音或者一个声道可用。3、应用程序大小限制 大部分的Java手机只有很少的内存空间用于运行MIDlet。此外,对MIDlet的大小始终有一个限制。实际的限制取决于手机设备和移动运营商的规定。在这样的限制条件下设计开发移动游戏固然是非常困难的,但是我们要知道,第一台家用电脑只有64 KB内存,但是仍然有人热衷于在其上开发游戏软件。在一些智能手机上内存的限制就少一些,比如Nokia 3650甚至可以运行几兆字节的应用程序。 4、高等待时间 等待时间-机器发出请求和接到响应之间所花费的时间-在计算机上是以微秒计算;在有线因特网上是以毫秒计算;而在无线网络则要以秒计算。 5、可中断性是关键 当用户接听电话的时候,手机都会中断进行中的游戏。游戏程序必须能够暂停并且继续,而且不会造成游戏问题(例如,游戏者在打电话的时候老怪仍然在移动,打死玩家扮演的角色,导致输掉游戏)并且不会造成内存溢出。 6、正在发展的技术用于开发移动游戏的技术并不是针对游戏设计的,因此常常有特定的限制条件。例如:J2ME规范不需要支持透明度,这就使得子图形除了在空白的背景上以外,在任何背景上都会很难看。幸运的是,大部分设备厂商的Java手机都补充了J2ME,支持了透明度。为了充分利用J2ME的性能,你需要支持手机特定的API;为了得到最好的效果,就需要为一个游戏编写好几个版本。最近发行的MIDP 2.0规范解决了一些此类问题,但是对不兼容MIDP 2.0的手机是无效的2.2.5开发现状:中国来看,有着庞大的用户群,但相关的制约因素使手机游戏处于低迷期。 1、平台的问题 现在手机的品牌有几十种,每个品牌又有几十款甚至上百款的手机,这无论是对游戏的开发者,还是普通的消费者来说,都是一个让人头痛的问题。2、手机性能的制约 由于手机游戏只是手机功能的延伸,所以存在着许多不利于游戏的因素。比如手机的屏幕小,颜色少,没有专门的游戏遥杆,游戏的容量小,内容简单,限制了游戏的多元化。3、下载游戏的操作过程过于复杂 想下载游戏,必须要有一部支持Java和GPRS的手机,然后还要设置并开通GPRS,过程相当繁琐,而且对于用户来说在仅有的屏幕上对游戏的了解不多,很容易受到欺诈。 4、过高的资费标准 手机游戏开发商还通过移动通信运营商或户网站、SP提供游戏服务,并且根据下载次数收取一定的费用并与相关合作方分配收入,有时也采用收取授权使用费或卖断使用权和版权的方式,导致游戏下载成本过高。 总体来说 手机游戏市场发展进入快速成长期,市场规模、用户呈上升趋势 。三、 游戏开发的概念3.1 MIDP中的游戏APIMIDP是专门为互联受限设备配置设计的,它为移动设备提供了一套API集合,MIDP包含用户界面类、持久存储功能与网络功能。早在MIDP1.0版本时,是没有单独的游戏API的,在MIDP2.0后增加了一个新的专门的游戏软件包Javax.microedition.lcdui.game,顾名思义,此包中定义了游戏开发的各种类型。这个软件包是一个专门为在移动信息设备上开发游戏应用而设计的,所以又叫作游戏API。10它里面的成员类有以下几个:GameCanvas、Layer、LayerManager、Sprite、TiledLayer。GameCanvas是提供基本的游戏界面;Layer是一个用来表示游戏中的可视元素的抽象类;LayerManager管理一系列的Layer;Sprite是一个基本的可视元素,它本身包含了许多操作,比如将一个图片切分成若干画面帧(Row Frame),再对这些画面帧编排出一个动画序列(Frame Sequence);TiledLayer是一个可以被许多图片填充的类似于表格的可视元素。10本论文在设计游戏过程中涉及到其中的GameCanvas类和Sprite类。73.2 游戏类构成在游戏中,主要的一些类构成有Pocket Boxing、Boxer、Enemy、GameCanvas。其中Pocket Boxing类继承了MIDlet类,用来进行MIDlet的Live Cycle控制;Boxer存储了玩家的拳击手的信息,进行拳击手的描绘;Enemy存储电脑控制的拳击手的信息,进行拳击手的描绘,它继承了Boxer类;GameCanvas继承了Canvas类,进行画面的描绘与操作。各类都是用与类名称相同的文件名来存储的。3各类间的关系如图3.1。3.2.1 Boxer类的实现Boxer类是用来存储玩家拳击手状态的信息,再以次为根据进行描绘。Boxer类由于与用来表现对手的Enemy类大致上是相同的,所以要以继承了Enemy类为前提来实现。MIDletCanvasInterfaceRunnableInterfaceCommandListenerPocketBoxingGameCanvasBoxerEnemy DefaultPackage图3.1游戏类图在Boxer类的Constructor当中,会进行拳击手图像的获取。这里要准备拳击手的身体、上段防御的手腕、下段防御的手腕、上段拳击的手腕、下段拳击的手腕等五种图像。通过身体图像四种类图像的配合,就可以描绘出生动拳击手动态。3.2.2 GameCanvas类的功能及特点GameCanvas类是Javax.microedition.lcdui软件包中的Cavas类的一个子类,它可以为游戏提供基本的显示功能;GameCanvas类是提供了游戏的中心属性,如游戏键当前状态的能力、双缓存绘图等;GameCanvas类是一个专门的为每一个GameCanvas实例填充初始化纯白像素的缓存器;通过调用Graphics对象可以改变缓存器中的内容。43.2.3 Sprite类的功能及特点Sprite类是一个能显示几个绘图帧(frame)中的其中一帧的基本动态层;这些帧大小相同并且由一个单独的图片(image)对象提供;Sprite类可以使许多帧连续的运动,可以使一个定制的序列以任何方式被放置;另外还可以提供转化于检测方法。下面是Sprite代码样例:1import javax.microedition.lcdui.game.*;import javax.microedition.lcdui.*;public class Text Layer extends Sprite Image _image; String _string;TextLayer (Image i) super( i );public void draw(Graphics g ) throws NullPointerException Graphics.LEFT ) ;3.3游戏角色的处理这里的游戏角色拳击手的初始化是以将拳击手设为后退,并将生命值设为默认值为主要目的。拳击手在挥出拳之后,将会在等待一段时间后恢复原本的防御状态。为了要进行这个等待处理,使用到了Tick计数。当现在的状态为上下拳击时,就会开始Tick计数,当数到4以上的状态时就会回到原来的防御位置。这样一来就可以表现出拳击手出拳头后再回到原来防御状态的样子。不过,在后退时挥出拳击的情况中,这里不能马上回到后退状态。要在挥出拳击后回到后退状态时,就得通过玩家自己的操作来进行了。3.4 游戏中的事件处理事件可以分为:低层事件( low-level event )与高层事件( high-level event )。低层事件一般用来处理设备事件,如:按键事件、探针事件。高层事件用来处理应用中的相关事件,如:命令事件、组件状态变化事件。由于开发手机游戏时我们主要用到的是Key事件的处理方法,因为移动设备的键盘是传递用户意图的最主要的输入设备,Key事件属于低层事件。那么低层事件中用下面的两种方法来处理应用的Key事件。2 3.4.1 key Pressed方法方法key Pressed是用来处理键被按下的事件,这个方法没有与其对应的显示的听众对象( Listener ),这些听众对象有系统根据实际对象缺省提供,例如后面提到的Canvas对象就是默认的key事件听众对象,它缺省地实现了Key Listener接口。简单的一个样例代码: .public void keyPressed (int keyCode) if (keyCode 0) /输出当前被按下键的键码System. out.println(“keyPressed ” +( (char) keyCode ) ); else 当按下手机的操作键盘上的按键时,就会触发这key事件,系统并会自动调用keyPressed()方法,并且系统将捕获到的键码传递给该方法,在上面的那段代码中方法判断了所按的按键值是否大于0,如果大于0输出所按的手机键盘上的实际值,否则执行其他的操作任务。4 3.4.2 key Released方法可以说方法key Released()与上面提到的keyPressed()方法是对应的。它是用来处理手机操作键盘上的按键被释放的事件,这个方法也同样没有与之对应的显示的听众,这些听众也是由系统根据实际对象提供的。下面是一个样例代码: public void keyReleased(int keyCode) if (keyCode 0 ) / /输出当前被释放键的键码System.out.println(“keyReleased ” +( (char) keyCode) ); else 当释放手机操作键盘上被按下的按键时,则会触发这个key事件,系统并会自动交由keyReleased()方法来处理该事件,同样的上面的这段代码中,该方法判断了所按的按键值是否大于0,如果大于0则输出所释放的手机键盘上的被按下的按键的实际键值,否则执行其他的操作任务。4 上面说的是在开发手机游戏过程中遇到的两种低层事件的方法keyPressed方法和keyReleased方法,下面就具体介绍“Pocket Boxing”手机游戏的开发过程。四、“Pocket Boxing”手机游戏开发制作4.1 游戏编程众所周知,J2ME现在最流行的就是制作手机游戏,况且现在无线游戏编程现在又是一个很热门的话题,不但因为它具有极强的趣味性,更重要的是它给我们带来了无限的商机。随着JAVA手机的诞生,手机游戏编程的灵活性与轻便性使得JAVA手机游戏成为游戏市场的又一亮点。 4.2.1 “Pocket Boxing”游戏背景介绍及开发环境 这里将通过一款拳击游戏来介绍格斗类手机游戏中的攻击与防御等重要因素、以及如何控制对手角色。这款游戏名字叫“Pocket Boxing”。在这款游戏中,玩家所控制的拳击手将出现在屏幕的左侧,电脑所控制的拳击手则出现在屏幕的右侧。拳击手可以进行上下两种的攻击方式,以及上下阻挡防守与后退防守的防卫。当攻击命中对手时,就可以是对手角色的生命点数减少,不过不是任何的攻击方法都可以使对手的生命点数减少的。当玩家在进行上方和下方的攻击的时候,对手进行相对应防卫的时候,在对手防守状态中是不能使对手的生命点数减少的,还有一种情况就是在对手后退一步避开你的攻击的时候也同样不会减少生命点数的。当对手的生命点数用尽的时候,玩家就获得了这一局比赛的胜利,就可以进入下一个回合。在进入下一个回合后,电脑控制的对手的生命值会恢复,同时拳击手的攻击力会加强,也就是难度会加大。相对的玩家控制的拳击手在前一回合所剩下的生命点数,也可以附加到下一回合的生命点数上去。游戏中一共有五个回合,在全部的回合中取得胜利的话就是冠军了。在中途如果被打败,就算是游戏结束了。游戏流程如图4.1:这款手机游戏是一个简单的MIDP应用程序,在这里进行开发有它需要的开发环境。MIDPlet的开发环境需要有java2 SDK1.3版以上(这里使用的是JDK1.4版)与MIDP的类库、以及后述的运行前验证工具三种。在J2MEWTK中除了包括MIDP的类库、运行前验证工具之外,还会把编译与包装(JAR文件化)、JAD文件的创建、模拟器的启动等在开发MIDP需要用到的操作加以集成。当完成了JDK1.4以及J2MEWTK的安装以后,就可以开始对游戏项目进行创建了。4.2.2 MIDlet的构成开发环境准备好了之后,就应该进行MIDlet的开发了。遵循MIDP规范的基本MIDPlet是组合了JAR文件与JAD文件来运行的。JAR文件是将Class文件或者是图像等集成在一起的文件,而JAD文件则用来指定JAR文件内启动MIDlet类名称或JAR文件的大小、版本等属性。移动电话的JAM(Java Application Manager)一开始就是将这个文件读进来后才启动MIDlet的。JAR文件虽然基本上与J2SE是相同的,不过其中所放置的列表文件内容是不一样的。列表文件中编写了许多的文件打包信息。一般来说可以在JAR文件内放置多个MIDlet,通过在JAD文件中编写MIDlet个数相等的内容,JAM就能依次判断MIDlet的数目。MIDlet文件的构成:(1)JAR(Java ARchive)文件:集成了Class File与图像、声音等内容的数据文件,虽然与J2SE的文件相同,但是列表的文件内容不同。(2)JAD(Java Application Descriptor)文件:指定启动的MIDlet类名称或是数据文件大小、版本等信息。(3)KDDI的地方,使用组合了JAR文件与JAD文件的KDDI专用的KJK(KDDIJavaeXtension)。4.2.3 MIDlet的生命周期MIDlet的生命周期,与Applet或DoJa是不一样的东西.若想要在Applet与DoJa之间作相互的移植时,对这个生命周期的流程有越深入地了解,在进行移植的时候就会越轻松。MIDlet是以下列的生命周期来运行的:(1)当终端发出了MIDlet的运行命令时,若编写于JAD文件MIDlet有多个的时候,就让其进行选择后启动MIDlet。(2)MIDlet的Constructor被调用。(3)MIDlet#startAPP()方法被调用,启动MIDlet。(4)在终端有来电的时候MIDlet#startAPP()方法就会被调用,并让MIDlet暂停。(5)当通话结束等的时候,就再次调用MIDlet#starAPP()方法,MIDlet就会再次启动。(6)调用MIDlet#destoryAPP(boolean)方法,以将MIDlet结束。如图4.2 : 4.2.4 MIDlet的画面显示基础MIDlet类本身由于并没有提供直接操作画面显示的功能,因此在MIDlet类的子类也没有直接操作画面显示的功能。因此,要使用管理画面显示功能的Display类。这个Display类可以让javax.microedition.lcdui.Displayable类的子类显示在画面上。开始按下重新启动按钮?显示暂停界面显示关卡结束界面显示标题界面按下结束按钮?按下自动按钮?1结束21显示关卡启动界面显示关卡游戏界面按下停止按钮?按下暂停按钮?过关玩家的胜利?全关卡过关?2显示关卡结束界面2显示游戏结束界面2YesNoYesYesYesYesNoNoNoYesYesNoNo 图4.1 游戏的流程图Fig 4.1. The flow chart of gamesnew()PausedPausedDestroyedDestoryApp()PauseApp()StartApp()DestroyApp() 图4.2 MIDlet的生命周期Fig 4.2 .The life cycle of MIDletsDisplayable类的子类大致来说可以分为两种,分别用来进行线与图形、图像的低级描绘类,与用来显示警告与文本的输入、选择列表等UI组件类。前者是指javax.microedition.lcdui.Canvaslei类,用来进行低级描绘。后者是指其中的javax.microedition.lcdui.Screen类与其子类(Alert、Form、List、TextBox类等)。Displayable类与子类之间的关系如图4.34.2.5 游戏项目的创建在J2MEWTK当中,是以项目这个单位来管理MIDletSuite,因此在进行程序编写前必须先要创建项目。首先要将项目取名为SimpleMIDlet。在Windows“开始”菜单启动J2MEWTK的KToolbar,启动之后,单击“New project”按钮。然后在“New project”对话框的“project Name”与“MIDlet Class Name”的文本框输入项目的名称“Pocket Boxing”,并单击“Create project”按钮。这样就完成了对游戏项目的创建。ObjectDisplayableCanvasScreenAlertFormListTextBox图4.3 Displayable类与子类类图Fig 4.3. Displayable and a Son diagram接着就要对程序进行编译了,说到编写程序代码首先要提到支持J2ME的开发工具。我用到的开发工具是Borland公司推出的开发工具JBuilder9企业版。其功能非常强大,不仅可以集成化的编码、调试,还可以进行应用发布,网络调试以及版本控制等等,是一个非常不错的开发工具。4.2.6 命令种类及命令处理这个游戏中要定义的命令,一共有使用在标题画面的Start、Exit命令与使用在游戏中的Pause、Resume、Quit命令共计五种。下面是这五种命令变量的程序代码:/*Start命令变量*/ Private Command startCmd=new Command (“Start”, command. SCREEN, 5);/*Exit命令变量*/ Private Command exitCmd=new Command (“Exit”, command. SCREEN, 1);如图4.5 图4.5游戏开始界面 /*Pause命令变量*/Private Command pauseCmd=new Command (“Pause”, command. SCREEN, 5);/*Resume命令变量*/Private Command resumeCmd=new Command (“Resume”, command. SCREEN, 5);/*Quit命令变量*/ Private Command quitCmd=new Command (“Quit”, command. SCREEN, 1);如图4.6: 图4.6游戏暂停画面4.2.7 游戏中的描绘处理进行描绘的doDraw( Graphics g )方法,将会在Game Canvas类进行描绘时被调用出来。描绘位置会在Game Canvas类中先使用Set Draw X( int x )和Set Draw Y(int y)方法来预先指定。在决定画面位置的时候,由于拳击手图像只有上半身,因此必须将图像的下半部分设置在画面的最下方。因此,就要准备能返回图像高度的get Height()方法。另外,在被击倒的时候由于是以拳击手倒在地下为前提,因此将什么都不描绘。描绘处理的程序代码如下: /*存储了描绘开始的X坐标的变量*/ Protected int draw X ; /*存储了描绘开始的Y坐标的变量*/ Protected int draw Y ; /* * 设置用来进行描绘的X坐标的方法 * Param x 进行描绘的X坐标 */ Void set draw X ( int x ) this. drawX=x ; /* * 设置用来进行描绘的Y坐标的方法 * Param y 进行描绘的Y坐标 */ Void set draw Y( int y ) this. drawY=y ; /* * 返回图像高度的方法 * return int 进行描绘的图像高度 */ int get Height() /返回身体图像的高度 return images0. Get Height() ; 以上是对Boxer进行的描绘,在Enemy类继承了在功能方面几乎相同的Boxer类,并承续其功能改写了get Imagepaths()方法与doDraw( Graphics g )方法,更改为进行了图像的获取以及与玩家位置相反的方向描绘。在Constructor当中,就会调用出Boxer类的Constructor,并进行图像的读取。4.2.8 游戏状态的类变量在游戏中,在Game Canvas类中定义表现游戏状态的类变量。要实现的变量将包括:标题、回合开始、回合中、回合结束、全部回合结束等变量。程序代码:/* 代表标题显示状态的常量 */ Private static final short TITLE =0 ;/* 代表回合开始显示状态的常量 */ 如图4.7 图4.7回合开始画面 Private static final short ROUND_START =1 ;/* 代表比赛中显示状态的常量 */ 如图4.8 图4.8比赛中画面 Private static final short FIGHTING =2 ;/* 代表回合结束显示状态的常量 */如图4.9 图4.9回合结束画面Private static final short ROUND_END =9 ;/* 代表回合过关状态的常量 */如图4.10 图4.10回合过关画面Private static final short ALL_ROUND_CLEAR =10 ;另外,除了上述提到的五种状态变量,还涉及到了代表存储现在状态的变量(game state)与暂停状态的标识(ispaused)。代码如下:/* 存储现在显示状态的变量 */ Private short gamestate ;/* 代表暂停状态的标志 */ Private Boolean ispaused ;4.2.9 按键事件的处理在进行按键处理的key Pressed方法中,当不是在回合中的时候或是在回合中但暂停中的时候,由于没有必要所以不进行处理。除此之外,在拳击中也不进行任何的处理,这是因为如果在拳击当中若能做出其他动作的话会非常奇怪。当都不符合以上条件时,就要根据所按下的数字按键来更改使用者的状态。在这款游戏中按键是这样分配的:“1”后退、“4”后退、“2”上方防御、“5”下方防御、“3”上方攻击、“6”下方攻击。当为上方攻击和下方攻击时,就要调用出doLifepointCheck4 Enemy( )方法来根据对手的状态减少生命点数,然后根据生命点数的剩余量来结束回合。6.2 J2ME手机游戏的开发意义 我们对于电脑游戏已经熟知,所以如果以这个标准来衡量手机游戏,那么手机在某种程度上可以看作是小型的计算机,它的处理能力与台式电脑的标准处理能力相比虽然很有限,但是已经能够运行一些小型的游戏。 现在全世界手机用户很多,甚至已经超过电脑的普及率,并且手机更新换代的速度绝不比电脑差多少。所以手机游戏已经具有了它成长的基础,这个基础要比当年的电脑游戏稳固得多。无线应用协议( WAP )手机已经成为目前手机市场的主流,基于WAP的游戏本质上是一个静态浏览载体,非常像一个简化的Web,是为移动电话小型特征和低带宽而专门优化的。要玩WAP游戏的话,要进入游戏供应商的URL( 通常通过移 动运营商门户网站的一个链接 ),下载并浏览一个或多个页面,选择一个菜单或者输入文字,提交数据到服务器,然后浏览更多的页面。WAP( 1.x )版本使用独特的标记语言WML

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论