欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    895191516基于J2ME为平台的坦克大战游戏开发论文.doc

    • 资源ID:2393613       资源大小:455.50KB        全文页数:51页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    895191516基于J2ME为平台的坦克大战游戏开发论文.doc

    摘 要J2ME(Java 2 Micro Edition) 是近年来随着各种不同设备,尤其是移动通信设备的飞速发展而诞生的一项新的开发技术。它定位在消费性电子产品的应用上,对设备的智能化、多样化,提供了革命性的解决方案,并因其“Write Once, run anywhere”的Java特性而提高开发的效率。随着手机的日益普及、Java功能在移动设备上的实现,Java应用程序产生的手机增值服务逐渐体现出其影响力,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。本论文着眼于J2ME技术的应用,开发一款可商用的手机游戏程序坦克大战。本程序的界面和运作方式继承于日本任天堂公司在20世纪80年代开发的Battle City游戏,将老少皆宜的经典作品移植到手机上来,为更流行的硬件平台提供应用软件。本论文介绍了任天堂红白机的软硬件特性、J2ME的相关技术及本程序的结构分析和具体功能的实现。关键字:J2ME,手机游戏, Java,坦克大战ABSTRACTJ2ME is a kind of fast developing technology implemented on various devices especially mobile communication equipments. It focuses on application for consumptive electronic products, providing revolutionary solution to the intelligentization and diversification of the equipment. It improve the efficiency of the development process thanks to its “Write Once, run anywhere” nature.When cell phone is getting ever more popular nowadays, with the implementation of Java technology on mobile equipment, increment of capital on communication service exhibits its force on peoples everyday life, providing them ever fast information just in hand. This dissertation focuses on implementation of J2ME technology and has developed a commercial game suite run on mobile phonesTank. This application inherits many characters of the old fashioned game Battle City which developed by Nintendo in 1980s. It transports the classical product to mobile phones, offering corresponding software for such more popular hardware platform.This dissertation introduces the characteristic of Nintendo FC machine and its software, J2ME and its relative technology as well as this programs structure and analysis of implementation in details. Key words: J2ME, mobile game, Java, tank, Battle City.引言Java语言是美国Sun Microsystem的James Gosling、Pratrick Naughton及Mike Sheridan等人于1991年精心设计出来的计算机编程语言,其构想在于实现使用同一种编程语言所写出来的程序可以在不同的平台上运作。这种架构对于消费性电子产品而言是具有革命性的,因为在消费性电子产品中的处理器及操作系统各不相同,要在这些平台上开发程序必须要了解各个平台的特性,以及其提供的API使用方式,分别开发不同的版本才能执行,影响应用程序的普及性。近几年,由于微处理器性能的大幅提升,加上无线通讯技术的突破,手持式移动设备开始受到大众的青睐。短短几年内,手机已经升级了几代产品,普及率逐年攀升,生产效率不断上升,产品价格比个人电脑的摩尔定律有更惊人的下调,以至手机是大多是城市居民不可缺少的一件随身设备。继短信、彩信等服务之后,中国移动提供基于Java的百宝箱业务,应用产品遍及商务应用、信息获取、英汉互译、游戏娱乐等多媒体领域。根据官方公布的统计数据,我国移动电话用户已突破3亿。依托这样的市场,一旦无线Java应用大规模开展起来,将会创造出比短信业务更为惊人的利润。Java语言原先的开发目的与市场的需求不谋而合,并且也已经成为手机应用程序开发的标准,国际大公司如Nokia、Motorola及Siemens等所设计的手机内都加入Java程序的支持,可见在不久的将来,Java将会成为移动设备上最热门的语言。手机中将Java语言引入,作为一种通用的开发标准,并将向市场推广普及仅仅短短几年,J2ME仍是一种新型的技术,中文资料除台湾出版过相关书籍外,国内相关介绍资源很有限,国内J2ME开发商也屈指可数,名声较响的Digital-Red公司也仅成立于1999年。本文可算是对新技术的一些尝试,代表对无线平台应用程序推广的一些努力。本论文中第一章介绍游戏机软硬件历史、Java语言、J2ME及其相关技术;第二章介绍了开发工具和相关软硬件环境的背景;第三章分析该作品设计的思想和流程,介绍总体结构;第四章并详细阐述有关重点实现细节;第五章提及了开发过程、心得体会、经验和感想。目 录摘 要- I -Abstract - II -引言- 3 -第一章绪 论- 1 -1.1 手机软件现状- 1 -1.2 游戏业务及J2ME概况- 1 -1.3 任天堂(Nintendo)的8位FC机器和Battle City背景介绍- 3 -1.4 本章小结- 3 -第二章 开发环境及相关技术的介绍- 4 -2.1 开发环境- 4 -2.2 Java语言的特点- 4 -2.3 关于JBuilder9- 4 -2.4 关于Wireless Tool Kit- 5 -2.5 Java Appication Manager- 5 -2.6 本章小结- 5 -第三章 程序结构、思想和相关技术- 6 -3.1 本程序需解决的有关技术问题- 6 -3.2 程序流程- 7 -3.3 绘图与MIDP2.0新增的GameCanvas包- 9 -3.3.1 提供低级绘制的Canvas类- 9 -3.3.2 Graphics类- 9 -3.3.3 PNG格式- 9 -3.3.4 Game包中的新功能- 10 -3.3.5 有关绘图的一些技术- 11 -3.4 坦克的控制和敌方的智能运行- 11 -3.5 子弹的运行和控制- 12 -3.6 RMS数据库系统- 13 -3.7 内存使用的最佳化- 14 -3.8 混淆器(Obfuscator)的使用- 15 -3.9 模拟器的相关调试- 15 -3.10 本章小结- 16 -第四章 程序分析和具体实现- 17 -4.1 游戏进入前的选择- 17 -4.2 主游戏逻辑及其涉及到的若干类- 18 -4.3 坦克的共同行为- 20 -4.4 玩家坦克的功能属性- 21 -4.5 敌人坦克的功能属性- 21 -4.6 子弹的运行和控制- 23 -4.7 记分系统- 24 -4.8 本章小结- 26 -第五章 总 结- 27 -5.1 本程序的总结和展望- 27 -5.2 经验和感想- 27 -致 谢- 29 -参考文献- 30 -附录 源程序代码- 31 -第一章绪 论1.1 手机软件现状 在信息社会中,手机及其他无线设备越来越多的走进普通百姓的工作和生活,随着信息网络化的不断进展,手机及其他无线设备上网络势在必行。但是传统手机存在以下弊端:1. 传统手机出厂时均由硬件厂商固化程序,程序不能增加、删除,有了错误也不能更新、修改,若要增加新功能必须另换一部手机。2. 传统手机访问互联网是通过WAP(Wireless Application Protocal),所有网络资源必须接通网络才能在线访问,非常耗时、费用亦很高。而Java技术在无线应用方面的优势非常明显:1. 应用程序可按需下载,而不是购买由硬件商提供的套件,可升级空间大。2. Java技术提供了一个类库,它使的应用开发商可以创建更为直觉、丰富的用户界面(GUI);3. Java技术使网络带宽的应用更为有效,因为应用程序可以下载到器件上,并在本地运行,仅仅是在连接到服务器时才会占用网络带宽。基于以上分析,Java手机将是未来手机的发展方向,是业界的热点。1.2 游戏业务及J2ME概况图1-1 Java 平台的结构虽然 Java 已经被用到许多企业级软体上,可是其实骨子里面还是非常适合用在嵌入式系统之中。Java平台演进到Java2后,Java平台分别针对不同领域的需求被分成四个版本,亦即J2EE、J2SE、J2ME以及JavaCard(其结构示意图见图1-1)。其中J2ME定位在消费性电子产品的应用上。这个版本针对资源有限的电子消费产品的需求精简核心类库,并提供了模块化的架构让不同类型产品能够随时增加支持的能力。这个版本的应用层面相当广泛,会是未来Java平台发展的重点项目。J2ME 在设计其规格的时候,遵循着“对各种不同的装置而造出一个单一的开发系统是没有意义的事”这个基本原则。于是 J2ME 先将所有的嵌入式装置大体上区分为两种:一种是运算功能有限、电力供应也有限的嵌入式装置(比方说PDA 、手机);另外一种则是运算能力相对较佳、在电力供应上相对比较充足的嵌入式装置 (比方说冷气机、电冰箱、电视机上盒 (set-top box)。因为这两种型态的嵌入式装置,所以Java 引入了一个叫做Configuration 的概念,把上述运算功能有限、电力有限的嵌入式装置定义在Connected Limited Device Configuration(CLDC)规格之中;而另外一种装置则规范为 Connected Device Configuration(CDC)规格。也就是说, J2ME 先把所有的嵌入式装置利用Configuration 的概念区隔成两种抽象的型态。J2ME平台被认为是最杰出的手机游戏平台,它为开发者、设备制造商、网络通信公司和消费者广泛接受。它有一些非常重要的特征对所有组织都有益。因为J2ME应用在不同设备上都是便携式的,他们常常可在网络上下载和执行。如果没有正确的防范,它则为用户和无线通信公司冒着无数个安全的风险。幸运的是,Java被设计成一种安全的语言。所有字节码应用在执行之前都要校验;JVM在执行过程中监督应用的安全性和存储违反问题。MIDP v2 运行时间包括一个完全特征化的、基于域的安全管理员,它在应用的数字签名者鉴别的基础上赋予应用API级许可。纵观IT产业的历史,就像军事的发展时常推动计算机的演化一样,计算机游戏已经成为技术创新背后的动力之一。计算机游戏者渴望更加强大的硬件计算能力;渴望不受不同的软件的限制无论是将图形强制在人工智能(AI)上 还是网络安全性。游戏开发者和玩家常常是前沿计算机技术的最早的采用者。由于他们的创新天性,游戏不再是由大型采购公司控制的技术产品游戏领域总是有充足的空间给那些在这方面有天分的单个创新者。手机游戏的盈利主要是由于它们的涉及面很广。手机已经与现代生活方式紧紧地结合在一起。他们是最普遍携带的个人用品中仅次于钥匙和钱包的东西。传统的台式机游戏将目标锁定在低级趣味的人和青少年身上,而手机游戏则每个人都可以访问的到随时,随地。尽管每个手机游戏都不贵,但是巨大的使用量(如:每人每星期一个新游戏)将使得这个市场商机无限。但是,对于开发者来说,将控制台游戏迁移到手机游戏工程很大。因为他们所面向的对象、生活方式和分布式模型都有着极大的区别。一个成功的手机游戏大多具有以下特征: ·易于学习: 既然手机游戏面向的是普通消费者而不是计算机专家,那么他们不可能深入的学习游戏技巧。消费者不会花几个小时去研究一个3元的手动操作的游戏。保持游戏的简单是最基本的要求。 ·可中断性: 多任务处理是手机生活方式的基本特征。手机用户常常在任务(如等一个电子邮件或者等车)之间有一小段时间。而游戏、日历管理、通讯和工作数据访问使用的是同一个设备。所以一个好的手机游戏应该提供短时间的娱乐功能,并且允许用户在游戏和工作模式之间顺利切换。 ·基于订阅:手机游戏的盈利成功取决于他们巨大的使用量。一开始开发和设计每个游戏都是昂贵的。如果一个手机游戏开发者要赢利的话,重要的是:同一个游戏引擎,多个标题,基本的故事情节类似。基于订阅的游戏是不断产生收入的最好方法。 ·丰富的社会交互: 不管一个游戏设计得多好,只要玩家找到了它的根本模式或者玩完了所有的游戏路径很快就会厌烦这个游戏。对于一个基于订阅的游戏,重要的是与别的玩家合作以增强所玩游戏的智力和随机性。在今天纷繁复杂的多玩家游戏中具有丰富社会交互的游戏证明是成功的。 ·利用手机技术的优点: 巨额的手机技术研发费用都花在提高设备和网络的可用性和可靠性上面。因此,手机设备硬件和网络协议与桌面/控制台世界(如全球定位系统(GPS)扩展、条形码扫描仪、和短消息服务(SMS)/多媒体信息服务(MMS)通讯)有着非常大的差别。好的手机游戏应该利用那些更新的设备特征和网络基础设备的优点。 ·无违法内容:既然所有年龄/性别的人群都玩手机游戏并且常常在公共/工作场合,就应该避免明显的暴力或者色情内容。1.3 任天堂(Nintendo)的8位FC机器和Battle City背景介绍图1-3 Battle City的界面 FC(Family Computer)主机在欧美又称Nintendo Entertainment System(可译作任天堂娱乐平台即NES)。FC主机在游戏业界造成的巨大冲击众所周知,这款主机在当时事实上几乎占领了世界各地多个国家的整个游戏市场,并使得逐渐图1-2 80年代中期的FC机器没落的北美游戏市场再度复苏。这款主机的性能比当时的多数主机都要强大,而价格上却便宜得多。主机所采用得处理器为CMOS 6502,一款已经淘汰的70年代中期产品。由于其价格便宜且极易使用,经过任天堂的改造后又焕发了全新活力。6502 芯片cpu 主频为8 bit,12 MHz,内存8k,画面 52色,同屏最多显示其中的13色,声音2个矩波,1个三角波,1个杂音,1个PCM音频(见图1-2)。Battle City是其发售卡带中的一款力作,设置了35个关卡,可以双人操纵,画面设置了若干种类的建筑物和阻挡物,以消灭所有敌人为通关条件,并有接宝物等增加游戏效果的设置,画面精美,音效杰出,在PC机的80386处理器仍未面世的当时,能在硬件上运行这样的2D程序不得不令人惊叹,难怪常有人说游戏程序是最大限度发挥硬件水平的载体。其游戏界面如图1-3所示。1.4 本章小结:引言和第一章中介绍了手机在无线应用方向的当今概况,并介绍了游戏业务在当前社会的发展潜力。分析了J2ME在手机软件开发中起的重要作用,描述了本论文的相关背景。第二章 开发环境及相关技术的介绍2.1 开发环境操作系统:Microsoft Windows XP程序语言:Java 2开发包: Java(TM) 2 Standard Edition (build 1.4.1_02-b06) Sun Micro. J2ME Wireless Tool Kit 2.1IDE: Borland Jbuilder 92.2 Java语言的特点1. 平台无关性Java引进虚拟机原理,并运行于虚拟机,实现不同平台之间的Java接口。使用Java编写的程序能在世界范围内共享。Java的数据类型与机器无关。2. 安全性Java的编程类似C+,但舍弃了C+的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针入侵系统。它提供了安全管理器,防止程序的非法访问。3. 面向对象 Java吸收了C+面向对象的概念,将数据封装于类中,实现了程序的简洁性和便于维护性,使程序代码可以只需一次编译就可反复利用。4. 分布式Java建立在TCP/IP网络平台上,提供了用HTTP和FTP协议传送和接收信息的库函数,使用其相关技术可以十分方便的构建分布式应用系统。5. 健壮性Java致力与检查程序在编译和运行时的错误,并自动回收内存,减少了内存出错的可能性。Java取消了C语言的结构、指针、#define语句、多重继承、goto语句、操作符、重载等不易被掌握的特性,提供垃圾收集器自动回收不用的内存空间。2.3 关于JBuilder9 JBuilder是目前最好的Java开发工具之一,在协同管理、对J2EE和XML的支持等方面均走在其他产品的前面。JBuilder是遵循Sun公司J2EE标准的可视化集成开发工具。Jbuilder是一种处于市场领先地位的跨平台环境,主要用于构建具有行业实力的企业Java应用程序。JBuilder集成了Borland公司开发工具系列的优秀特性,使得使用过C+Builder,Delphi的程序员很容易的过度到JBuilder的开发环境当中。由于Java技术的发展迅速,经常有新的组件推出或新的错误修正,致使JBuilder的版本升级很快。当两年前还是JBuilder6时,现今已推出了9、10的版本。2.4 关于Wireless Tool Kit WTK(Wireless Tool Kit)是Sun公司针对J2ME推出的用于手机和Palm等移动设备的开发包,是除手机厂商的专用开发包外唯一的手机模拟器开发包。它通用性高,开发出的应用程序可保证能运行在大部分设备上,而不像专用厂商具有一定的不兼容性。虽然它没有强大的功能和完善的调试手段,但它提供运行模拟器的最基本组件,是其他IDE需集成采用的必备元素。2.5 Java Appication Manager手机中负责调配程序运行资源的管理后台是Java Application Manager。它所使用的传输媒体可以是红外线、网络、以及其他可用来传输的媒体。Java Application Manager 会从网络上下载代表该Application Suite 的JAR 档,接着在手机上安裝此MIDlet Suite,然后在手机开始执行该应用程序。整个详细的运作流程如图2-1所示。存储媒体手机内建浏览器JavaAppicationManagerKVM描述档图示档JAR档Java ServletHTML网页6安装应用程序8载入并执行应用程序使用者手机网站4.选择应用程序7.启动网络1浏览网页2.浏览描述档3.浏览图示5.下载图示和JAR档图2-1 JAM工作流程图2.6 本章小结:第二章介绍了Java语言的特点、本程序的开发环境及其相关工具的原理和使用。第三章 程序结构、思想和相关技术3.1 本程序需解决的有关技术问题1. 游戏程序是一项精度要求很高的程序系统,因为其代码利用率很高。一个实时运行的最终作品,每秒都会运行成千上万行程序,绘图事件、键盘事件都会以极高的频率在后台等待响应,若有丝毫的差别都将很容易导致程序在运行不久后可能出现严重错误,甚至死循环。因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况考虑在设计中。2. 游戏中为了美观,适用性强,可能需要采用外部文件引入的图片贴图,有关贴图,在MIDP2.0中提供了用于增强游戏功能的game包,使得解决静态或动态、画面背景、屏幕刷新的双缓冲等都有较好的解决方案。3. 己方坦克的运行可以通过键盘响应事件控制,但敌方则因为是自动运行,就需要有一定其一定的智能性;同时,出现在屏幕上的敌方可能会有较多的数量,这需要为每个敌方开辟一个线程以便能让其独立运行。Java的多线程能力为实现这样的游戏提供了可能。敌人坦克的运行算法也需要进行适当的设置,以免游戏过于简单,单调。4. 对于双方坦克发出的子弹的控制也需要对其跟踪控制,子弹也需要处在独立的线程中。敌方子弹仅需要扫描用户坦克,而用户坦克需要在每一步扫描所有的敌方坦克。这需要对所有的对象有较好的控制。另外,子弹在运行过程中也需要实时扫描是否碰撞到了相关障碍物或屏幕边界。如此过多的线程同时在本来效率就不高的KVM虚拟机上运行,也许会导致程序的缓慢。5. 双方的坦克在前进时也需要考虑到是否碰撞到相关物体或对方坦克,以免重叠运行,造成许多物理上不可能的情况,缺乏真实感。每一次刷新页面、每前进一步都需要将所有的周围环境都进行扫描。6. 游戏的结束、开始、动态信息画面作为构成一个完美程序都是必不可少的重要部分。良好的用户界面更是吸引用户的硬指标,相关的美术构图也需要有一定的考虑。7. 游戏的地图不可能通过绘图来解决。否则,不仅难于控制和处理过多的元素,也会因过多的大型图片而不能限制程序的大小,失去手机上程序的原则和Java的优势。同时,地图关卡不宜保存在手机有限的内存中,而最好采取外部文件的读入读出方法。8. 用户运行游戏时需要有分数记录的可能。如何采用合理的记分标准,需要进行适当的设计。记录分数的存储方式也需要有较好的解决方案。手机中由于处理器和内存空间、存储空间都十分有限,其数据库系统与普通PC大相径庭。其数据库结构较为简单,被称之为RMS系统。9. Java是基于虚拟机的半解释型编译系统,其执行效率较C+等完全编译后的程序会低很多,程序如果不进行精简和优化,将可能导致运行的不流畅。除开发过程中对结构上的控制、变量的使用、算法的优化等优化外,还可以使用混淆器(Obfuscator)进行程序打包后的优化。以上相关技术细节和整体流程将分别在以下小节阐述。3.2 程序流程MIDlet suite是MIDP应用程序的最小单位,JAM负责将手机内的MIDlet suite以图形化的方式呈现,让用户能够选取欲执行的MIDlet suite,一旦选取了某个MIDlet suite,操作系统就会激活KVM执行里面的MIDlet。MIDlet及相关的支持类组成了MIDP应用程序的实际内容。消减状态(Destroyed)停止状态(Paused)运行状态(Active)StartApp()DestroyApp()呼叫MIDlet的构造函数DestroyApp()PauseApp()图3-1 MIDlet的流程每个MIDlet都必须继承javax.microedition.midlet.MIDlet这个抽象类。在MIDP规格中定义了MIDlet的生命周期,以及可以存在的三种状态,包括Paused、Active以及Destroyed,每一个MIDlet在任何时刻只可能处于其中的一个状态。这三种状态的转换关系如图所示:本程序采用面向对象的设计模式,对游戏中的所有物体赋予对象的概念和属性。运行程序后允许用户选择执行选项菜单,在开始游戏后将先从外部文件载入地图文件,对背景的所有物体进行绘图。在主程序运行的线程中,画面刷新将以一定的频率采用双缓冲技术对屏幕重绘,实时反映整个游戏的进行状态。用户控制的坦克运行在主线程中,随屏幕刷新的频率而步进。敌方坦克将在游戏开始时逐渐新增线程,每增加一个敌方对象就新增加一条线程,一旦线程数满到最大值(本程序暂设置为6),就不允许敌人再继续出现。用户坦克自诞生之时起将拥有一发子弹,子弹虽然开在单独的线程中,但运行结束后(比如撞到相关物体或敌方坦克时)并不结束子弹对象,只是将其线程终止。用户再次发射子弹时只是将终止的线程再次激活。在屏幕重绘的主程序中,将在每次的循环中判断若干事件。如:用户坦克的生命是否已完全用尽,敌方坦克数是否已经为零,屏幕上的坦克数量是否少于仍剩下的坦克数量等。以便程序进入相关的分支执行相关的反应代码,结束游戏或统计分数等。主程序流程如图3-2所示:Logo 画面选项画面主程序屏幕绘图本关记分统计显示GameOver显示历史记分表About开始敌方需要出坦克时,生成坦克初始化参数死亡时符合结束条件时图3-2 本程序的主流程图程序为需要完成独立功能的需显示的模块设置了单独的类。TankMain类是继承自MIDlet的控制主程序启动的首先被载入系统的部分。载入程序后首先启动的是程序介绍的信息画面。闪过后载入StartChoice类,为用户提供可选择的选项。在选择开始后,将运行BattleCanvas类中的总流程控制。它决定了游戏何时该结束,何时分配敌人数量,GameOver字样的闪现规则,地图的绘制及整个游戏的调度。图3-3 与主程序相关的类的UML视图图3-3是程序中类之间的UML分析图。敌方坦克与用户坦克的相关功能和具体行为分别定义在EnemySprite和UserSprite类中,它们都继承自TankSprite公共类,以简化程序的代码、理清结构。在每关的结束或死亡后都将载入ScoreScreen类,统计当前的分数。如果已死亡或完成所有的关数,程序将用户所得的分数记载到RMS数据库中,进行永久性保存。载入过程中将对所得分数与以往历史比较,放置到合适的位置中,形成排序。3.3 绘图与MIDP2.0新增的GameCanvas包3.3.1 提供低级绘制的Canvas类为了能有程序开发人员控制接口的外观和行为,需要使用大量的初级用户接口类,尤其在游戏程序中,几乎完全依赖的就是Canvas抽象类进行绘图。从程序开发的观点看,Canvas类可与高级Screen类交互,程序可在需要时在Canvas中掺入高级类的组件。Canvas提供了键盘事件、指点杆事件(如果设备支持),并定义了允许将键盘按键映射为游戏控制键的函数。键盘事件由键代码指定,但这样控制游戏会导致缺乏通用性,并不是每个设备的键盘布局都适合游戏的操作。应当将键代码转换为游戏键的代码,以便硬件开发商能定义他们自己的游戏键布局。本程序中,操纵用户坦克运行的按键都定义为游戏控制键,这样便能适应所有的机器。3.3.2 Graphics类Graphics类提供了简单的2D绘图功能。它具有24位深度色彩的绘制能力,以三原色分别各占一个字节表示其颜色。程序只能在paint()函数中使用Graphics绘制,GameCanvas可调用getGraphics()函数直接绘制在缓冲区上,可以在任何时间请求传输到前台。其对象会被传给Canvas的paint()函数,以便最终显示。3.3.3 PNG格式PNG(Portable Network Graphics)格式是MIDlet唯一支持的图象格式,PNG具体格式由PNG Specification,Version 1.0定义的。PNG格式提供透明背景的图象,这对绘制游戏画面和被操纵主角极有帮助。坦克之间或与障碍物碰撞时就不会因为背景有特定的颜色,显示出的效果像贴上的图片而缺乏真实感,物体之间轻微重叠时最上层图片也不会覆盖超过其有效象素外的部分。PNG格式图片中包含许多定义其图片特性的冗余部分(Chunks)。这些代码包含在每一个单独的png格式图象中,然而如果将多个png图象合并在一张幅面稍大一些的整图中,多个chunks就可以得到精简,图片的大小可以得到控制。使用Image类中的createImage函数可从整图中分割出所需要的元素。在Game包中的TiledLayer和Sprite类都整合了这样的功能。本程序中的地图元素都集成在一张tile.png图片中,实现了方便的管理和程序体积的精简。3.3.4 Game包中的新功能 MIDP自2.0以后新增了Game包,为游戏的开发带来了极大的便利。地图绘制、主角的动态显示、按键的检测、图层的控制等游戏专属的特性都得到了在移动设备上最大的发挥。 LayerManager(以下简称LM)提供控制整体画面层的控制。它包括了一系列自动获取了代号和位置的层,简化了各层加入游戏画面的过程,提供了自动排序和绘制的能力。LM存储了一个层的列表,新的层可以用append函数附加、删除和插入。层的序号相当于坐标的Z轴,0层表示最接近用户视觉,层数越高,离用户越远。层号总是连续的,即使有中间的层被移除,其他层的序号会作相应的调整以保持整体的完整性。LM中的View Window控制着与LM相对坐标的可视区域。改变View Window的位置可以制造出滚动屏幕的效果。本程序中所有的地图、坦克都采用LM控制,敌方坦克的生成由附加一个EnemySprite对象得到。唯有界面右侧的计分栏由Graphics类绘制。Sprite类是继承自Layer的用于存储多桢的基本可视元素。不同的frame可交相显示,构成动态的效果。图片可翻转、颠倒、由一个主角图片就可以方便的得到所有方向的显示状态,相比原先只能使用Canvas绘图,需要将所有方向的主角图象都绘制在png图象中简化了许多。Sprite也可以从整合的图象中读图,读图时将把大图分解为若干等宽等高的小图。每个小图按照其排列顺序有相应的序号,在程序中调用其序号,就可以绘制出相应的图片。本程序中的双方坦克、子弹都由Sprite继承得到。在有些情况下,控制主角的翻转,尤其是多幅图片配合显示的过程,如果将多图的共享定位点设置在通常的左上角,将很不容易控制,因为许多翻转都是以其他点为参考电的(比如,中心点)。由此,引入参考点的概念。参考点由defineReferencePixel函数确定未翻转图片状态时的坐标。默认是(0,0)点,如果需要,可将参考点设置在画面边界之外。本程序中的坦克的参考点定义在图片正中,以便简便的实现转向等功能。子弹的参考点设置在子弹底部的中心,因为子弹一出炮筒的时候紧挨着坦克的象素就是其底部中心。TiledLayer是有一组图象格元素(grid of cells)组成的整块虚拟图象。该类使不需要高分辨率的图象就能创建大幅图面成为可能。这项技术通常应用在2D游戏平台的滚动背景的绘图。一块整图可被分割成等大小的图象格,每块格有其对应的序号,按照行列递增。多块格可由大块同时替换组合而模拟动态的背景,这不需要逐块替换所有的静态图象格而显得非常方便。本程序中的地图即为游戏背景。每块障碍物都有其响应的代号,其中,用户需保护的总部因为体积稍大,使用了四块图象格显示。地图背景分为20*22个图象格,每个格使用一个字节表示其中的障碍物,图象文件存储在外部文件中,以16进制的整数串表示,因此每个地图的大小为固定的440字节。如果整块地图均由绘图产生,将导致体积迅速增加,且对坦克与障碍物的碰撞也难以检测。J2ME中并没有J2SE中的File类,获取外部文件的手段很有限,仅仅在Class类中提供了一个getResourceAsStream函数,将外部文件获取为输入流,再由InputStream的继承类读出。3.3.5 有关绘图的一些技术在没有MIDP2.0前,进行游戏绘图一般需要手动编程使用双缓冲。需要在paint()方法内所想要画的图形画在一张预先准备好的背景,等所有绘图操作都完成后再将背景的数据拷贝到实际的屏幕上。Image类提供了一个建立背景的静态方法createImage(int width, int height),再利用getGraphics()方法取得属于这个背景的Graphics对象,所进行的绘图操作都会作用在背景上,等到全部的绘图操作完成后,再调用drawImage()方法将背景的数据复制到实际显示的屏幕上。这样的技术在绘制动画时特别有用。绘制动画时经常需要不断地更新画面,而更新画面的操作就是先将屏幕以fillRect()的方式清除,再将下一张图片画在屏幕上,然而反复的清除及重绘会造成屏幕的闪烁现象(flicker),因此使用双重缓冲的好处就是在背景进行这个清除及重绘的操作,再将完成的绘图拷贝到屏幕上,由于用户看不到清除的操作,因此就不会出现闪烁的现象了。不过在某些MIDP的实现上已经加上了双重缓冲的支持,因此在处理前应先利用Canvas类的isDoubleBuffer()方法来判断。3.4 坦克的控制和敌方的智能运行 GameCanvas中提供了与以往MIDP1.0不同的键盘采样功能。Canvas类中采取响应键盘事件的方法,每次执行周期时会读取keyPressed函数中需执行的代码。这样的机制并不适合某些游戏场合。在某些不支持keyRepeat功能的设备上,反复执行的按键,比如发射子弹,将不能因为长时间按压而自动重复,这样就需要用户高频率的手动击键,这在操纵空间非常有限的移动设备上是非常困难的。同时,事件的执行周期也并不一定适合游戏的场合,也许需要更高频率执行的按键却只能在指定的周期内规律的响应。对此,针对游戏的开发,Game包提供的键盘状态功能将显得十分有效。 GameCanvas提供getKeyStates函数可获取当前键盘上的信息。将以位的形式返回键盘上所有键的按与释放的状态,当bit为1时,键就是被按下的状态,为0时则为释放状态。只需要此一个函数的返回值就可以返回所有键的状态。这保证了快速的按键和释放也会被循环所捕捉。同时,这样的机制也可检测到几个键同时按下的状态,从而提供斜向运行等相应功能。敌方按照规则不能和用户坦克重合,则它每行走一步就需要把用户坦克扫描一次,判断其是否碰撞到了用户的坦克。Sprite类中提供了collidesWith函数,用于判断是否与某个TiledLayer、Sprite、Image的对象有图象上的重合(即游戏中的碰撞)。然而不能仅仅将用户坦克作为其Sprite参数传递给敌人的类进行判断。因为如果发生碰撞,collidesWith成立,则两辆坦克已经发生了图象重合,违反了规则

    注意事项

    本文(895191516基于J2ME为平台的坦克大战游戏开发论文.doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开