[计算机软件及应用]Java手机游戏雷霆战机的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[计算机软件及应用]Java手机游戏雷霆战机的设计与实现学士学位毕业设计(论文)报告
Java手机游戏雷霆战机的设计与实现【摘要】
现在,手机用户不断增加,手机的功能越来越复杂,而手机的各种服务业越来越多样化。
J2ME技术将是未来手机游戏的发展方向之一,目前很多手机厂商(Nokia,Sony Ericsson等等)和手机游戏提供商都十分关注。
虽然这一领域的技术并不是特别成熟,但可以预计的是,在未来的时间里,该技术必定发展迅猛,成为手机游戏产业的又一热点。
本文将要介绍的是基于J2ME的Java手机游戏雷霆战机的设计与实现,通过Sun Java(TM) Wireless Toolkit 2.5.2 for CLDC和Eclipse 3.2等开发工具,利用Java语言,开发出一款操作简单,容易上手的飞机射击类多模式的游戏。
丰富多彩的飞机,
着游戏背景和各种包和子弹将大大地增加该游戏的趣味性。
从准备到设计到实现,本文重探讨了该游戏的开发背景、总体设计以及功能实现等。
在本文中将首先对此游戏进行功能分析。
紧接着是游戏的所有准备工作,主要包括设计游戏的规则,素材准备及界面设计,按键设计,类的设计和主要算法分析。
准备工作就绪以后便是工作的核心部分,此部分将要介绍实现各种效果和算法。
【关键词】J2ME;Java;手机游戏;雷霆战机
i
Java手机游戏雷霆战机的设计与实现
Design and Implementation of Java mobilephone
games Thunder fighter
Abstract:
Nowadays, the number of mobile phone users is increasing. The functions of the phone are becoming more and more complex, and the various service of mobile phone industries are increasingly diversified. J2ME technology will be one of the future directions of development of mobile games. Many mobile phone manufacturers (Nokia, Sony, Ericsson, etc.) and mobile gaming providers are very concerned. Although this area of technology is not mature, it can be expected that in the future, the technology must be developed rapidly to become another tendence of the mobile gaming industry.
This article is based on J2ME Java mobile phone games Thunder
fighter design and implementation, through the Sun Java (TM) Wireless Toolkit, 2.5.2 for CLDC and Eclipse 3.2 development tools, the use of the Java language, developed a simple operation, easy started aircraft shooting mode of the game. A variety of aircraft, game background and a variety of packages and bullets will greatly increase the fun of the game. Ready to design to implementation, the paper focuses on the development background of the game, overall design and functions. In
this article, first game analysis. Followed the game all the preparation work, including the rules of the game design, material preparation and interface design, button design, class design and algorithm analysis. Preparations were made is the work of the core part of this section will be introduced to achieve various effects and algorithms.
Key Words :[J2ME] [Java] [mobile game] [Thunder fighter]
ii
学士学位毕业设计(论文)报告
目录
【摘
要】 (i)
Abstract:……………………………………………………………………………. .ii
【引
言】 (1)
1、绪
论 (1)
1.1手机游戏开发的背景 (1)
1.2 手机游戏的开发特色 (1)
1.2.1 潜在的庞大用户群.................................................................. .. (1)
1.2.2 免费开放标准与广泛游戏来
源 ....................................................... ..2
1.2.3 网络设备与技术的运
用 (2)
1.3 手机游戏的限制与缺点 (2)
1.3.1 游戏应用程序大小限
制 .....................................................................
2
1.3.2 短时间游
戏 ..................................................................... . (2)
1.3.3 显示屏幕较
小 ..................................................................... (2)
1.4 手机游戏开发意义 (2)
2、游戏分析 (3)
2.1开发平台与技术分析 (3)
2.1.1 开发环
境 ..................................................................... .. (3)
2.1.2 WTK与ECLIPSE的介
绍 (3)
2.2 可行性研究 (4)
2.3 需求功能分析 (4)
2.3.1 游戏构
想 ..................................................................... .. (4)
2.3.2 数据流程分
析 ..................................................................... ............... 5 3、游戏设计.. (5)
3.1 游戏规则设计 (5)
3.2 素材准备及界面设计 (6)
3.3 按键设计 (8)
3.4 主要算法分析 (9)
3.4.1 随机生成飞机算
法 ..................................................................... .. (10)
iii
Java手机游戏雷霆战机的设计与实现
3.4.2 敌机和包移动的算
法 ..................................................................... .. 10
3.4.3 碰撞检测算
法 ..................................................................... . (11)
3.5线程设计 (12)
3.6 类的设计 (14)
3.6.1 程序的主要
类 ..................................................................... . (14)
3.6.2 程序架
构 .....................................................................
..................... 18 4、游戏实现 (19)
4.1游戏运行界面的实现 (19)
4.2 通过Sprite类实现动画 (20)
4.3 游戏的功能实现及算法 (20)
4.3.1 地图的绘制及移动的实
现 (20)
4.3.2 游戏按键的实
现 ..................................................................... (21)
4.3.3子弹效果实
现 ..................................................................... .. (22)
4.3.4 碰撞检测处理的实
现 ..................................................................... .. 23
4.3.5 爆炸效果的实
现 ..................................................................... ....... ..25 5、总结 (26)
5.1 游戏展望 (26)
5.2 结束语 (26)
参考文献 (27)
致谢 (28)
iv
学士学位毕业设计(论文)报告
【引言】
随着手机的日益普及、Java功能在移动设备上的实现,Java应用程序产生的手机增值服务逐渐体现出其影响力,对人们丰富多彩的生活内容、提供快捷方便的资讯起着至关重要的作用。
随着信息技术的快速发展,Java语言的跨平台的优势,毫无疑问在手机上体现的淋漓尽致,而Java Me是基于Java技术的,Java Me 扩展了Java的优势。
在当今操作系统众多的嵌入式领域中,Java给了我们一个跨平台的好机会,利用Java,我们可以很好的实现跨平台,可以方便简洁地把一个游戏从一个手机移植到另一个手机,避免重复的编码,提高编码效率。
随着JDK的推出和不断发展的手机性能,Java语言设计的游戏速度已经得到大大地改善。
所以今后基于Java的游戏将是一种趋势。
本文将要介绍的是基于J2ME的Java手机游戏雷霆战机的设计与实现,通过Sun Java(TM) Wireless Toolkit 2.5.2 for CLDC和Eclipse 3.2等开发工具,利用Java语言,开发出一款操作简单,容易上手的飞机射击类多模式的游戏。
1、绪论
1.1手机游戏开发的背景
手机的普及在手机游戏市场中呈现爆炸式的发展,同时伴随着越来越强大的手机性能,对于手机游戏的开发的需求在今后的时间里仍然将呈现大幅度的上涨。
这些年伴随着Java技术的不断发展,Java程序的运行速度也有了显著提升,同时硬件技术也在不断进步,从而使得Java处理比较复杂的3d图形成为可能。
在这个技术迭出的时代,Java语言现在可以方便的利用显卡日益强大的硬件加速能力。
实
际上目前已经有许多基于Java的2d和3d游戏,其中不乏大型多人在线游戏。
但是相对于目前整个游戏产业来说,Java游戏的范围依旧非常小,以至于其力量在手机游戏之外的领域几乎可以被忽略不计。
当然Java作为一种游戏编程语言和平台,这些年来还是取得了长足的发展,在后 applet时代走着复兴之路。
1.2 手机游戏的开发特色
一套手机游戏的开发和其他游戏的不同之处有很多方面,一般有以下几点。
1.2.1 潜在的庞大用户群
以目前的市场规模来看,手机几乎人手一只。
手机的主要功能除了通话外,娱乐的功能是越来越明显。
根据欧洲市场研究报告指出,游戏下载对西欧移动电话增值服务收入的贡献度,增幅持续增长。
在未来几年内游戏下载将越来越受欢迎。
1
Java手机游戏雷霆战机的设计与实现
1.2.2 免费开放标准与广泛游戏来源
在开发手机游戏时,开发人员可以免费得获得各种软件开发应用接口,手机厂商或者软件厂商不会收取任何费用,到Nokia或者SUN的网站查看即可明白。
同时手机游戏的获取方式也十分简单,只要由手机连接 GPRS上网购买,并且立即安装到手机上,或者可以在网站上购买下载至计算机,再用红外、蓝牙或者手机数据线来传送安装。
由于获取手机游戏的方式简单快捷,手机游戏在今后会越来越受欢迎。
1.2.3 网络设备与技术的运用
手机游戏有很多应用上的限制,例如多媒体、网络联机和多人游戏等应用限制。
不过新的J2ME版本已经定出更完善的规范。
而且具备网络联机的手机厂商也开始讲其增加至新款手机上。
同时再配合未来电信业的3G网络,手机游戏将更加出众,那时手机的功能将会像计算机一样。
1.3 手机游戏的特点与缺点
虽然制作手机游戏有其特性与优点,但是还是有些局限性,下文将简单的进行介绍。
1.3.1 游戏应用程序大小限制
大部分Java手机,只有很少的内存空间来运行MIDlet。
此外,在制作手机游戏时应用程序的大小始终有一个限制,这些因素都会影响制作出来的游戏质量。
不过伴随着手机的进步,越来越多的手机,可以运行大容量的应用程序,就像一台小型计算机一样。
1.3.2 短时间游戏
当用户在使用手机玩游戏时,要注意到手机主要的功能是用来通话的而非玩游戏,因此他们不想把所有的手机电量都用来玩游戏。
所以首要考虑设计手机游戏过关时间绝对不能太久,最好控制过关可以在几分钟内完成,同时要允许游戏可以中断等。
1.3.3 显示屏幕较小
手机显示设备是以小屏幕为主,无法提供像计算机或电视游戏那样大的屏幕效果。
所以屏幕大小不同,对于制作游戏而言也会产生一些问题,主要在控制游戏画面大小和美工排版等方面,因此手机屏幕大小将会成为影响游戏制作的原因之一。
1.4 手机游戏开发意义
手机游戏成了电信增值业务中一项主要的应用,在许多公共场合不时会看到人们拿着手机玩游戏。
相比较早开发的“贪吃蛇”、“俄罗斯方块”等手机游戏,如今的手机游戏,无论是从视觉效果、听觉效果还是游戏的可玩性来说,都要精彩的多。
在全球,移动电话数量巨大,除美国之外,其他许多发达国家拥有手机的人数比拥有计算机的人数还多。
2
学士学位毕业设计(论文)报告
在我国,手机拥有量甚至超过了美国的人口数量,而且每个月手机数量还正以惊人的速度递增着。
手机市场的高速增加带动了手机游戏市场的急速膨胀,基于Java等技术平台的手机游戏市场规模纷纷呈现几何增长态势。
2、游戏分析
2.1开发平台与技术分析
2.1.1 开发环境
操作系统:Microsoft Windows XP
程序语言:Java
开发包:Sun Java(TM) Wireless Toolkit 2.5.2 for CLDC
Eclipse 3.2 IDE:
2.1.2 WTK与ECLIPSE的介绍
(1)WTK 的全称是Sun J2ME Wireless Toolkit —— Sun的无线开发工具包。
这一工具包的设计目的是为了帮助开发人员简化J2ME的开发过程。
使用其中的工具可以开发与 Java Technology for the Wireless Industry规范兼容的设备上运行的J2ME 应用程序。
该工具箱包含了完整的生成工具、实用程序以及设备仿真器。
据统计现在可以获取的有四个版本,分别是1.0.4, 2.0, 2.1和2.2。
每个版本都包括许多种语言,像是英语,日语,简体中文,繁体中文4个语种包。
WTK是Sun提供的一个开发工具包。
目前各大手机厂商往往把WTK经过自身的简化与改装,推出适合自身产品,如SonyEricsson,Nokia Developer’s suit 等,都属于此种类型;而通过JBuilder, Eclipse等IDE,J2ME开发包工具可以被绑定在这些集成开发环境中,进一步提高开发效率。
(2)Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。
就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。
幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具。
Eclipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。
它主要由Eclipse项目、Eclipse工具项目和Eclipse技术项目三个项目组成,具体包括四个部分组成——Eclipse Platform、JDT、CDT和PDE.JDT支持Java开发、CDT支持C开发、PDE用来支持插件开发,Eclipse Platform
则是一个开放的可扩展IDE,提供了一个通用的开发平台。
它提供建造块和构造并运行集成软件开发工具的基础。
3
Java手机游戏雷霆战机的设计与实现
2.2 可行性研究
(1)技术可行性:手机游戏“雷霆战机”是一款较为小型的手机游戏,本程序将老少皆宜的经典作品移植到手机上来,为更流行的硬件平台提供应用软件,根据已有的手机游戏设计经验,利用J2ME来可以实现游戏的功能。
(2)操作可行性:该款游戏在所有支持Java的手机上都可运行,按键简单,易于操作,趣味性强。
2.3 需求功能分析
需求分析过程是整个系统开发最重要的阶段,分析的成功与否,决定着整个系统功能的完善性以及稳定性。
在该阶段需求分析人员需要确定整个产品的功能要求,并且将现实事务抽象成对象并建。
2.3.1 游戏构想
雷霆战机是款非常经典的手机游戏,游戏规则非常浅显易懂。
玩家进入游戏之后,可以根据自己的喜好,选择不同的游戏模式。
在此游戏中,共有两种游戏模式。
一种是闯关型,顾名思义,玩家通过射击敌机来闯关,每关结束时都有一个大BOSS,玩家共被赋予三条性命,总关数有两关。
另一种是竞技模式,在此模式中玩家仍旧被赋予三条,不限时的进行游戏,每击打掉一架敌机后,玩家就获得相应的分数,累计得分,在最后时显示成绩。
综上,此游戏制作流程相对比较清晰。
根据此游戏设计的基本构想,主要涉及到的对象可能如下:
(1)玩家飞机:玩家飞机有多种选择,玩家在进行游戏时,通过左右键和确定键控制
其移动和发射子弹。
(2)敌机(包括普通小敌机和大BOSS):此游戏中总共有五种小敌机,两种大BOSS,
根据不同的模式和关数控制小敌机的种类。
(3)子弹包:当玩家的飞机碰撞到子弹包时,可以变换成不同的子弹,此游戏中玩家
共有4种子弹可变换。
(4)血量包:当玩家碰撞到此包时,玩家此条命的血量增加五格。
每被敌机击中一次,
血量减少二格。
血量不小于6为绿色,不小于4为黄色,其余为红色。
(5)生命值包:当玩家碰撞到此包时,玩家生命值加一。
每条命有10滴血。
(6)防御包:当玩家碰撞到此包时,玩家被敌机子弹击中时血量不减少,当被敌机撞击到时,敌机被炸毁。
以上对象中,除玩家的飞机是固定生成在界面上,其他对象都是随机生成的。
4
学士学位毕业设计(论文)报告
2.3.2 数据流程分析
当玩家进入该游戏应用时,首先进入的是欢迎界面,此界面中有两项选择,开始游戏和游戏说明。
游戏说明即帮助菜单,其中包括一些改游戏的简单介绍和一些操作说明。
当选择开始游戏时,玩家进入游戏模式选择界面,在此界面中,玩家可以根据各自的喜好选择不同的游戏模式。
为了增加游戏的趣味性,在闯关模式中玩家可以选择自己喜欢的飞机,在竞技模式中,玩家可以选择自己喜欢的游戏场景。
游戏界面流程如图2.1。
欢迎菜单
开始游戏游戏说明
闯关模式竞技模式游戏帮助
飞机选择场景选择
得分
图2.1 用户界面流程图 3、游戏设计
3.1 游戏规则设计
(1)基本规则。
当游戏开始时,玩家通过方向键控制飞机的移动,确定键控制飞机的子弹发射。
在闯关模式中,玩家在不同的关数中击落不同数量的小敌机才能够遇见最终的大BOSS,此大BOSS有一定的血量,要被击中一定次数之后才会消除,玩家才能够进入下一关。
在竞技模式中,玩家在有限的生命值三条命的条件下,以击中越多的小敌机为胜利的标准,每击落一架小敌机玩家可以获得一定的分数,最终以积分判断此次游戏的战绩。
(2)飞机的生成。
飞机的产生方式是随机的,并且是间断的产生不同类型的小敌机,最终产生大BOSS。
闯关中通过计数控制小敌机产生的数量。
竞技模式中,小敌机产生的数量不限,直至游戏结束才停止生成。
5
Java手机游戏雷霆战机的设计与实现
(3)包的生成:原理同飞机的生成。
(4)我方飞机(敌机)子弹的产生:我方飞机子弹的产生,通过监听确定键来生成。
当玩家按了确定键,则产生相应的子弹。
产生子弹的位置和我方飞机当前位置有关。
5)我方飞机的移动:我方飞机的移动通过监听方向键来控制其移动。
(
(6)敌机、包及子弹的移动:敌机、包子弹在产生之后,以一定速度按照同一个方向移动。
7)飞机等的消除:飞机等被击中的方式为直接移除,之后添加上爆炸的图片。
(
(8)胜负判断:闯关模式:当将所有小敌机及大BOSS击败后,连续闯过两关为胜
利。
在竞技模式中:当玩家三条命消耗掉时为失败,可以通过分数判断战绩。
3.2 素材准备及界面设计
在雷霆战机游戏中,使用了大量的图片素材。
根据各个图片的功能,图片的种类丰富多彩。
以下将对其进行简单的介绍。
(1)游戏中菜单使用到的图片,主要有主菜单,帮助菜单,界面选择,飞机选择图片,此些界面中都使用到了各种背景图片。
如图3.1。
图3.1 游戏背景
(2)在游戏中涉及到的对象颇多,主要有我方飞机,敌机(小敌机和大 BOSS)各种包及各种子弹。
我方飞机:由于在此游戏中,我方飞机可以根据玩家自己的喜好进行选择,所以总共有两种。
同时在游戏进行时,由于我方飞机可以通过碰撞保护包来形成保护膜,所以同一架飞机会有不同的颜色。
为了使得视觉上有更好的效果,当游戏初始时和暂停时,我方飞机通过显示不同的颜色表明不同的状态。
所以对于我方飞机总共有四种颜色,即四种状态。
同一个颜色的飞机有三种形态,静态,左侧身飞行和右侧身飞行,如图3.2。
6
学士学位毕业设计(论文)报告
图3.2 我方飞机的两种形态
敌机:为了增加游戏的趣味性和层次感,在不同模式和不同关数中,设置的小敌机的种类和数量是不同的。
但总共备有了5种小敌机。
由于闯关模式中有两关,所以将准备两种大BOSS,如图3.3和3.4。
图3.3 各种小敌机图3.4 两种大 BOSS
图3.5 子弹元素图3.6 各种包
图3.7 各种子弹
(3)在此游戏中,不同的飞机有不同的子弹。
而且,我方敌机可以通过撞击子弹包来改变子弹种类。
子弹有不同的元素构成,通过将不同元素排列组合形成不同种类的子弹。
在此游戏中,子弹元素总共涉及到4种,由4种子弹元素组成5种成形的子弹,如图3.7,子弹包有3种,生命值包1种,血量包1种,如图3.5和
3.6。
(4)在此游戏中,飞机经常发生碰撞,飞机经常被击毁,所以爆炸图片经常被使用到。
因为爆炸是一个动态过程,所以设计了6*6帧的爆炸图片,利用此图片可以制作成爆炸的动态图,如图3.8。
7
Java手机游戏雷霆战机的设计与实现
图 3.8 爆炸图片
(5)接下来将对游戏的界面进行设计准备。
游戏的界面分为控制区和操作区,控制区是整个游戏的控制按钮的集中区域,操作区是游戏者进行游戏的场所。
为了游戏界面的美观和一致,大多数界面都采用相同的背景,字体颜色风格相似等。
游戏界面如图3.9至3.12所示。
图3.9 欢迎界面图3.10 模式选择界面
图3.11 场景选择界面图3.12 飞机选择界面
3.3 按键设计
根据查找资料得知,手机键盘上各个按键对应的各项值如下表3.1。
在今后的游戏实现中将根据一些参数值来编写程序。
8
学士学位毕业设计(论文)报告
表3.1 按键的各项性质
键名称 getKeyStates返回值
UP GameCanvas.UP.PRESSED:2
DOWN GameCanvas.down.PRESSED:64
LEFT GameCanvas.LEFT.PRESSED:4
RIGHT GameCanvas.RIGHT.PRESSED:32
SELECT GameCanvas.FIRE_PRESSED:256
1 GameCanvas. GAME_A_PRESSED:512
3 GameCanvas. GAME_B_PRESSED:1024
7 GameCanvas. GAME_C_PRESSED:2048
9 GameCanvas. GAME_D_PRESSED:4096
其他数字键其他数字键 0
通过上面的各个按键的各项性质介绍,在此游戏中可以将一些按键设计设置如下表3.2。
表3.2 按键设计
按键功能
方向左键/数字键7 飞机左移
方向右键/数字键9 飞机右移
方向上键/数字键1 飞机上移
方向下键/数字键3 飞机下移
方向中间键/其他数字键飞机发射子弹
左功能键确定或者进入
右功能键退出或者返回
3.4 主要算法分析
通过上面的介绍,可知此游戏有闯关模式和竞技模式。
在闯关模式中,玩家可以选择自己飞机的种类,为了能让玩家体现闯关模式的难易度层次感,现设计如
下。
在素材中已知准备的小敌机共有5种,为增加趣味性,在第一关中仅设置4种小敌机,在第二关中设置5种小敌机,同时在数量上,第一关设置30个小敌机,而第二关40个。
当然也可以扩大设置差距,使得难易度差距更明显。
在竞技模式中,玩家可以选择自己喜欢
9
Java手机游戏雷霆战机的设计与实现
的场景,小敌机设置种类是不变的,小敌机的生成随着我方飞机的失败而结束。
每当我方飞机击落一架小敌机时得分加10;如果我方飞机处于保护状态且与小敌机撞击时,小敌机被撞毁,同时得10分。
3.4.1 随机生成飞机算法
在此游戏中,敌机的出现是随机的,并且能够反复出现。
我们可以使用随机函数 Random控制飞机出现的时间间隔。
random.nextInt()表示随机生成一个 INT型的数值。
此函数不仅可以控制生成小敌机的间隔,同时返回的这个数值可以用来标记小敌机的种类。
addElement表示添加一个元素的函数,
Package(arg0,arg1,arg2)函数表示生成一个包,参数arg0表示package的种类,(arg1,arg2)表示添加的包所在界面中的位置。
EnemyFactory.addEnemy(arg0,arg1)表示添加敌机,参数arg0表示敌机的种类,arg1表示敌机容器,属于Vector类
定义的对象。
以闯关型为例,此处算法的思路主要表示为:可以通过设置一个变量enemycount来控制产生小敌机的数量,当出现的敌机数量没有超过30架时,使用随机函数不断地生成各种敌机和包,当敌机的数量超过30架时,停流程图如图3.13。
止产生小敌机,在屏幕的最上端生成大BOSS。
开始
绘制myplane
定义enemycount为生成小敌机个数
N
Enemycount<30
Y
用random()函数生成大BOSS
生成小敌机
enemycount++
结束
图 3.13 随机生成敌机流程图
3.4.2 敌机和包移动的算法
敌机和包的移动属于同一种形式,都是在随机生成以后,按照一定的直线方向沿着
10
学士学位毕业设计(论文)报告
纵向移动。
在实现时,只要先将要生成的随机敌机和包绘制在界面上,然后刷新线程,每隔一段时间移动一帧,即重绘其在界面上的位置。
通过变量speed控制其飞行的速度。
并且在每次移动前先判断一下是否超出界面即可。
主要使用到的函数有:
sprite.move(0,Math.abs(speed));
移动的流程图如图3.14所示。
开启线程
i=0
i<5 N
Y
添加包
N i++
包在界面刷新屏幕内 Y
包移动一帧 i--
移除前一帧位置上的结束包
图 3.14 包移动的流程图
3.4.3 碰撞检测算法
在此游戏中,碰撞是经常发生的,子弹与飞机的碰撞,飞机与包的碰撞,飞机与飞机的碰撞。
所以,碰撞检测及处理至关重要。
本游戏中使用的Sprite类对碰撞检测具有较好的支持。
在 Sprite上定义一个矩形区域,如果其他Sprite或者图片的像素点进入了这个区域,则视为碰撞。
用户也可以不调用这个函数,因为默认情况下将Sprite的整个区域进行定义。
但是如何检测是否发生碰撞呢,在Sprite类中有以下几个函数可以运用:
(1) public final Boolean collidesWith(Sprite s,Boolean pixelLevel)
此函数中第一个参数是被检测的碰撞对象,第二个参数是一个boolean类型,如果
11
Java手机游戏雷霆战机的设计与实现
为true,则认为两个Sprite上不透明点发生了重叠,就算碰撞,如图3.15;如果为false,则认为两个Sprite所在矩形区域发生了重叠,就算碰撞,如图
3.15。
参数取true,会让碰撞效果更加生动。
以下以两方飞机的碰撞为例介绍。
图3.15 碰撞检测
如上图所示,图中的(1)和(2)是将要碰撞的两架飞机图片,由于这些素材的图片格式是png,所以图片的背景是透明的。
图中(3)所示的是两架飞机以参数值为true的方式碰撞,即红线标出的是矩形区域发生了碰撞。
图中(4)所示的是两架飞机以参数值为false的方式碰撞,即图中红线标出的飞机机身发生了碰撞。
而为了让碰撞更加生动,本游戏中采用了图中(3)的碰撞方式。
(2) public final Boolean collidesWith(Tiledlayer t,Boolean pixelLevel)
该函数中参数一表示和Sprite进行检测的是TiledLayer类型。
(3) public final Boolean collidesWith(Image image,int x,int y, Boolean pixelLevel)
此函数用于检测Sprite和图片进行碰撞的情况,但是使用较少。
所以,在雷霆战机游戏中使用的碰撞检测是第一种函数。
3.5线程设计
在游戏中所要创建的所有动画,是使用线程把所准备的多张图像按顺序描绘出来。
所谓的线程就是指程序的运行单位,使用线程的便捷之处在于可以同时进行处。