(论文)J2ME技术在手机游戏制作设计(2013年优秀毕业设计论文)_第1页
(论文)J2ME技术在手机游戏制作设计(2013年优秀毕业设计论文)_第2页
(论文)J2ME技术在手机游戏制作设计(2013年优秀毕业设计论文)_第3页
(论文)J2ME技术在手机游戏制作设计(2013年优秀毕业设计论文)_第4页
(论文)J2ME技术在手机游戏制作设计(2013年优秀毕业设计论文)_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

摘 要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, 游戏编程, 事件, 描绘处理AbstractJava is already changed from a platform-independent programming language to a mission-critical technological with manufacture platform independent, and java encourage IT circle to deeply tap the huge potential of application with the care of Web. The emergences of J2ME push it to a new high level. J2ME( Java 2 Platform, Micro Edition (J2ME) ) called “Java 2 platform” for short a pocket-edition is a prefect solution plan of consume products and embedded equipment, after J2SE&J2EE in SUN company. J2ME is making a special effect at the wireless program technology. J2ME provide a complete set of solution plan, its also make it become possible that issue the new software application by the manufacture of equipment, service supplier and the people of develop application.This article has seven portions: include the introduction, the general situation of J2ME technology, the demand of the game design analyzes, the significance and development of Pocket Boxing, the difficult, the prospect of mobile phone games exploitation and the Conclusion. The forth part “the production of Pocket Boxing mobile phone games” is the focus of this article. This entire article is around this focus, and this part detail introduces the exploitation process of a mobile phone game and the issues. This part introduces: the case, API of games, deal with the accident and the other focus to introduce is the manage of games description.Through the detail introduce of J2ME, the function of java is obvious. Of late years, follow the emerge of java mobile phone its unimpeded identity and portability make java mobile phone games become a new focal point of game market. J2ME have unlimited brighten and make an important role in the future life.Keywords: J2ME, MIDP, Game programming, Deal with description, Case目 录摘 要IAbstractII第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-43-第1章 绪 论手机是人们日常生活中所用的非常频繁的通信工具,虽然现在其费用比有线电话高,但是其随时随地的沟通优势,使人们摆脱了线路的束缚。目前中国的一些大城市几乎人手一部或几部手机,正是由于手机的高普及率,使得无线移动商务才得以迅速普及和发展。JAVA技术已经从一种最初用来编写与硬件无关的嵌入式系统的编程语言变成了一种与厂商无关、与硬件无关的健壮的服务器端技术,它使整个企业界可以全面发掘以Web为核心的应用程序的巨大潜力。随着JAVA技术的不断更新提高,J2ME技术的出现,使得手机游戏越来越成为我们关注的焦点。J2ME技术目前最流行的就是在制作手机游戏方面,JAVA手机的出现使得这一技术更有它的用武之地,发挥着他灵活、轻便、快捷的作用。下面在本篇文章中就将详细的介绍J2ME这一技术在手机游戏制作方面的具体过程以及其重要的作用。第2章 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 JVM ( 虚拟机 )JVM是专门为微型电子设备与资源受限设备如:手机、寻呼机、移动互联网设备、家用微电子设备等设计的一种轻便、紧凑的JAVA虚拟机。JVM可以为微型电子设备提供一个完整的JAVA运行环境,除了一些微型设备所必需的适当的功能有所不同外,它是由JAVA虚拟机规范定义的真实的JAVA虚拟机。它是专门为那些受资源限制,只有几百K字节内存的微型设备设计的。JVM起初是由SUN微系统实验室为一个名叫“Spotless”的项目创建的。它的目标是为资源受限制的Palm(是目前较为流行的掌上电脑操作系统)可连接的电子设备,实现一个java虚拟机。基于上述原因,JVM具有以下几个特点:(1)小,仅具有40KB至80KB的静态内存。(2)轻便、精巧。(3)模块化并可定制。(4)尽可能完全紧凑的完成设计目的。2.2.3 MIDP( 移动信息设备简表 )MIDP是专门为互联受限设备配置设计的,它为移动设备提供了一套API集合,MIDP包含用户界面类、持久存储功能与网络功能。它同时也包括一个供用户下载新应用到终端设备的标准运行环境。运行在MIDP下的小应用程序叫做MIDlet移动设备小应用程序,它与Applet类似。MIDP要求平台设备提供一个机制用来存储简单的数据记录,通过正常的平台事件,比如重新启动和电池更新维护系统的完整性。MIDP是以SUN、Motorola、Nokia为中心的MIDPEG组织(Mobile Information Profile Expert Group)所制订出来使用在CLDC上的Profile,是以能使用在移动电话、双向对讲机、可无线通信的PDA(个人数字助理)上面为前提设计出来的。另外,像日本国内的NTT DoCoMo、J-PHONE、KDDI等电信商与移动电话制造商也都曾参与了MIDPEG。MIDP是在CLDC的功能上附加提供适合目标设备用的GUI与事件处理功能。这样一来,就可以当成MIDP应用程序(MIDlet)来运行了。MIDP由于是由多个企业所共同策划出来的开放标准,因此主要的移动电话制造商也会制造出大量的对应机种。也就是说,以MIDP为基准所制作出来的应用程序,也将可以在流通于市面上的移动电话上执行。另外,MIDP不仅限于移动电话,也已经被移植到PDA Palm OS上,而以MIDP for Palm OS的名字来称呼(与KJava是不同的)。在不使用各电信商的扩展API的时候,制作给移动电话用的MIDlet也将可以使用在Palm OS上面。由于未来MIDP也将会搭载到不同设备之上,也由于其兼容性高,只要写过一次程序,就可以在其他移动电话或是移动电话以外的设备上执行;而这也就是它最大的好处。2.3 手机游戏的发展手机是现在人们生活中必不可少的通讯工具之一,有着其重要的作用,现在的人们越来越认识到它的重要性。作为手机中的一部分手机游戏,也发挥着它特有作用。可以说,手机游戏发展到今天已经越来越为人们所熟知,也越来越受到人们的喜爱。但是应该看到,国内手机游戏的发展还是刚刚起步,与欧美日韩等先进国家还有着一定的差距,但是这种差距正在一步一步的缩小。2.3.1 目前国内的发展情况随着技术对游戏经验的促进,游戏市场持续增长。商业IT革命为我们节省了时间和金钱,从而提高了我们的工作水平,我们因此花费更多的时间和金钱在游戏上,来改善生活的整体质量。甚至在当今困难的经济时代,游戏仍保持快速增长,它仍然是盈利行业的组成部分。Java开发者应该注意到这里蕴藏着的巨大的商机。在全球数字娱乐的快速发展浪潮中,中国的游戏产业正以其惊人的井喷式发展速度前进,牢牢吸引住了世界目光。当然,目前中国游戏产业一片大好的形势可以说是电脑网络游戏一枝独秀的成绩。据信息产业部 2004 年 10 月统计出的主要业务量数据表,到本年 10 月止,中国移动电话用户合计32503.4 万户,比上年末新增 5508.1 万户。明年或者后年 3G 手机牌照发放下来以后,手机游戏的硬件设备更是日趋完善。2004 年里,又有很多手机游戏中小型开发企业成立,很多新的手机游戏涌入内容市场。似乎在这红红火火形势下“手机游戏马上会火起来”这一想法已经点燃了很多人心里的希望之火。手机游戏市场的确有很大的市场发展空间,前景看好,但是在中国游戏市场中马上占据主流地位是不大可能的,那应该还需要至少一年的“磨合期”。 中国大众还不大熟悉手机游戏这一新鲜事物,在消费心理和习惯上需要引导和培养,尤其是在电脑网络游戏大行中国的时期。这也是一个消费对象需要被确定的问题。什么样的人会为手机游戏而消费呢?而这直接关系到这一新兴产业的存活。只有有了消费需求,才能带动整个手机游戏产业链的循环。 在发展不见明朗的萌芽期,手机游戏营运方式、费用结算方式也是需要一段摸索时间的。内容提供商、电信运营商、手机终端生产商之间利益的协调还需要实践地调整。而这都是目前中国手机游戏界内无法做到的事情。手机游戏肯定会有大发展,但是,目前不适合非理智地冒进。92.3.2 目前国际的发展情况在国际上日本、韩国在这方面处于领先地位。日本在手机游戏领域占据了绝对的领导地位。1999年,包括北美在内的很多国家和地区对手机游戏还一无所知,日本就已拥有超过30万的手机游戏用户,占全球手机游戏用户的70以上。2001年初,当短信游戏在全球逐步发展之时,日本NTT DoCoMo已经推出了近500款imode游戏。2004年4月,日本计算机娱乐协会(CESA)发表的统计报告显示,2003年日本国内利用手机上网玩游戏的用户数达897万人。日本在手机游戏领域走在世界前列的主要的原因是:其一,日本拥有庞大的移动数据业务用户群。经过近年来的不断发展,到2004年6月底,日本移动用户数已经达到8270万,其中7000万以上的用户使用移动数据业务。NTT DoCoMo的imode业务是世界公认的经营最成功的移动数据业务。而手机游戏作为其中的一项业务,拥有广泛的用户群。其二,日本是传统的电子游戏大国。世界传统游戏市场的巨头索尼、世嘉和任天堂都在日本,他们手中掌握了丰富的视频游戏和PC游戏资源,都可以转化为手机游戏产品。2004年,NTT DoCoMo推出了新一代FOMA手机,具有更强大的“iappli”( Java )游戏功能。新一代FOMA手机,把软件存储区域和数据保存区域(高速缓存)的总容量提高到现有230k的2倍以上,从性能上看已经超过了任天堂GBA掌机。这说明,随着日本手机功能的升级和无线宽带网络数据承载能力的提高,手机游戏已经对高端的游戏厂商产生了强大的吸引力,手机游戏已不再是简单游戏的代名词。到2007年,日本的手机游戏市场规模将会增长到近6亿美元。近年来,韩国网络游戏一直保持着高速增长的势头,这为手机游戏的发展奠定了良好的用户基础。与此同时,韩国的移动通信用户基础非常雄厚。2004年,在韩国总共4500万人口中,移动通信用户数已经超过了3500万。韩国政府一直在努力推动包括网络游戏和手机游戏在内的数字内容产业的发展,相应的优惠政策和充足的资金投入催生了大批的手机游戏开发商,有力推动了手机游戏内容的开发进程。与此同时,诸如NC Soft、Webzen、Nexon等韩国领先的网络游戏开发商也积极跻身移动游戏领域,而主要的移动门户运营商NHN和DAUM积极致力于移动在线交互式游戏的开发,从而促进了手机游戏内容的繁荣。虽然韩国的手机游戏产业发达,但其国内市场是有限的。为此,随着市场竞争的加剧,韩国企业致力于推动手机游戏产品的出口。目前,韩国手机游戏产品主要向美国、日本和欧洲出口,出口的市场份额分别为:美国56、日本19.9、欧洲12.6、其他国家11.5。欧洲很早就推出了手机游戏业务,但在2003年以前,欧洲手机游戏市场还主要停留在SMS和WAP游戏时代。与日韩相比,欧洲的手机游戏市场相对滞后。随着移动数据业务的不断发展和市场压力的不断加大,欧洲移动运营商已认识到改善手机游戏市场环境的必要性和紧迫性。在终端问题上,欧洲的运营商开始直接引入日韩的高端手机,打破了传统欧洲手机市场为欧洲手机厂商垄断的局面;在经营模式上,他们也采取了开放的数据业务经营模式。比如Vodafone公司就推出了Vodafone Live,通过合作分成的模式鼓励手机游戏开发商的积极参与。也有公司直接引入日本imode的运作模式和游戏内容。这些举措大大推动了欧洲手机游戏业务的发展。到2003年年底,欧洲手机游戏市场的环境已基本成熟,Java手机在欧洲已经十分普及,还出现了像NGage这样的专用手机游戏终端。据预测,2008年欧洲手机游戏市场达到30亿欧元,占移动娱乐内容收入的19。美国手机游戏市场起步虽晚,但是发展却十分迅速。从2002年秋天开始,美国大多数移动网络速度得到了提升,更加适于手机游戏业务的发展。如今,美国移动运营商每月都在推出新的游戏,手机厂商也在不断推出新的支持手机游戏的产品。从游戏提供的数量看,美国移动运营商已经大大超过了欧洲运营商。2003年,手机游戏已经成为美国众多移动数据下载应用的第一应用。IDC数据显示,2003年美国手机游戏用户渗透率为7.9;预测到2008年,美国手机游戏渗透率将达到34.7,达到6520万户的规模。Yankee Group的分析师表示,美国手机游戏业务的迅速发展,使得手机平台有望成为继电脑、控制杆、掌机游戏、互联网之后的第五大游戏平台。从当今国内外形势看,我国在手机游戏制作方面还刚刚处于起步阶段,还不像日韩和欧美国家处于一个高速发展阶段。我们只是刚刚引进这一技术,但是随着时代的发展,我们应该看到手机游戏制作在中国的市场以及在中国发展的潜力。我们要相信在不久的将来,国内手机游戏市场一定回迎来一个春天的!8 第3章 游戏设计的需求分析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游戏类图Fig 3.1. Game diagram前提来实现。在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”手机游戏的开发过程。第4章 “Pocket Boxing”手机游戏开发制作4.1 游戏编程众所周知,J2ME现在最流行的就是制作手机游戏,况且现在无线游戏编程现在又是一个很热门的话题,不但因为它具有极强的趣味性,更重要的是它给我们带来了无限的商机。随着JAVA手机的诞生,手机游戏编程的灵活性与轻便性使得JAVA手机游戏成为游戏市场的又一亮点。 4.2 格斗类手机游戏实例手机游戏有很多种类,其中格斗类游戏凭借着它的趣味性和娱乐性深受人们的青睐。如何制作一款优秀的格斗类游戏,就成为手机游戏开发人员一个最关键的问题了。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游戏开始界面 Fig4.5.Game beginning interface/*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游戏暂停画面Fig4.6.Game pause appearance4.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

温馨提示

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

评论

0/150

提交评论