Flash游戏制作——坦克大战毕业论文.doc

上传人:小小飞 文档编号:3901614 上传时间:2019-10-09 格式:DOC 页数:48 大小:1.33MB
返回 下载 相关 举报
Flash游戏制作——坦克大战毕业论文.doc_第1页
第1页 / 共48页
Flash游戏制作——坦克大战毕业论文.doc_第2页
第2页 / 共48页
Flash游戏制作——坦克大战毕业论文.doc_第3页
第3页 / 共48页
Flash游戏制作——坦克大战毕业论文.doc_第4页
第4页 / 共48页
Flash游戏制作——坦克大战毕业论文.doc_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《Flash游戏制作——坦克大战毕业论文.doc》由会员分享,可在线阅读,更多相关《Flash游戏制作——坦克大战毕业论文.doc(48页珍藏版)》请在三一文库上搜索。

1、 毕业设计(论文)课题名称: Flash游戏制作坦克大战学 院: 软件学院专 业: 信息工程班 级: 081131 二零一二 年 四 月I摘 要flash游戏是一种新兴起的游戏形式,以游戏简单,操作方便,绿色,无需安装,文件体积小等优点现在渐渐被广大网友喜爱。由于flash游戏主要应用于一些趣味化的、小型的游戏之上,以完全发挥它基于矢量图的优势。flash游戏因为Flash CS 3和ActionScript 3。0的原因,在近年发展迅速,许多年青人投身其中,并在整个flash行业中发挥重要作用。flash player占据了90%互联网用户的浏览器,所以发的发展空间还十分巨大,前途不可估量。

2、制作游戏的初衷是因为在当今人们的工作很繁琐枯燥,在闲暇时能玩玩一些小游戏来放松自己。本游戏运用了Flash基本知识与精巧的算法还原了90年代的经典游戏坦克大战,由于是Flash游戏,在进网页浏览时要尽可能的减少游戏加载速度和提高游戏运行速度,所以游戏模型采取了最简单的矢量图绘制而成,放弃了色彩比较丰富的位图,整个游戏作品仅22KB大小,与静态网页的大小相差无几,完全满足一般网络带宽的加载需求。游戏算法方面采用了面向对象程序设计,面向对象的编程引进了类的概念,在本文中重点介绍了类的使用方法。游戏中每一个游戏元素都采用不同的类进行了封装,代码采用最新Flash CS 4。0中的ActionScri

3、pt3。0,在AS3。0中每个类的脚本代码都用一个独立的*。as文件保存,在游戏中每一个元素都是一个独立的类,比如子弹类实现了子弹检测是否击中敌人的功能、玩家控制的坦克类实现了玩家坦克上下左右移动和射击的功能、敌军坦克类实现敌人自主移动和射击的简单人工智能功能等等,这些都体现了类的封装概念,让设计者更加轻松、读者更加易懂。关键词: flash;碰撞;射击; 移动目 录第1章 绪论41。1 Flash软件简介41。2 Flash的特点41。3 Flash的发展现状与前景51。4 Flash游戏61。5 Flash游戏的发展方向7第2章 游戏设计思路82。1 坦克大战的玩法和技术评分82。2 坦克

4、大战的框架与交互元件的组成82。3 坦克大战游戏算法设计12第3章 坦克大战游戏实现143。1 游戏布局143。1。1 游戏主界面153。1。2 全局脚本153。1 玩家类173。2。1 玩家坦克的移动173。2。2 玩家坦克发射子弹213。2 玩家子弹类213。3。1子弹的速度与方向223。3。2 子弹的碰撞243。3 敌人类263。4。1简单人工智能273。4。2 敌人的移动273。4。3 敌人发射子弹293。4。4敌人与玩家子弹的碰撞293。4 敌人子弹类303。5。1 敌人子弹的速度和方向313。5。2 敌人子弹的消失条件313。5 领主类323。6。1 领主的登场333。6。2领主的

5、移动和射击333。6。3 领主的生命值333。6。4 领主被击败了343。6 领主子弹类363。7。1 领主子弹的移动373。7。2 领主子弹与玩家的碰撞383。7 玩家生命值393。8。1 生命值的宽度403。8。1 游戏如何失败403。8 关卡423。10。1 关卡的组成433。9 游戏结束与得分443。11。1 玩家的分数总结443。11。2 游戏的重新开始44总 结453第1章 绪论1。1 Flash软件简介早期Flash是由macromedia公司推出的交互式矢量图和 Web 动画的标准,后来被Adobe公司收购,将Flash升级为Flash CS系列,现在已更新到Flash CS

6、5,Flash CS引进了photoshop技术,并且将ActionScript从2。0升级到了3。0,以前的Flash代码部分从Flash文件内部移动到了文件外部,使开发者和设计者都能简单的进行查找和修改,运行速度也提升了5-30倍,功能更为强大。网页设计者使用 Flash 创作出既漂亮又可改变尺寸的导航界面以及其他奇特的效果。Flash也是存储芯片的一种,通过特定的程序可以修改里面的数据。Flash是一种创作工具,设计人员和开发人员可使用它来创建应用程序、演示文稿和其它允许用户交互的内容。Flash可以包含视频内容、简单的动画、复杂演示文稿和应用程序以及介于它们之间的任何内容。Flash特

7、别适用于创建通过Internet提供的内容,因为它的文件非常小。Flash是通过广泛使用矢量图形做到这一点的。与位图图形相比,矢量图形需要的内存和存储空间小很多,因为它们是以数学公式而不是大型数据集来表示的。位图图形之所以更大,是因为图像中的每个像素都需要一组单独的数据来表示。在Flash中创作内容时,需要在Flash文档文件中工作。Flash文档的文件扩展名为*。fla。Flash文档有四个主要部分: 1. 舞台是在回放过程中显示图形、视频、按钮等内容的位置。在Flash基础中将对舞台做详细介绍。 2. 时间轴用来通知Flash显示图形和其它项目元素的时间,也可以使用时间轴指定舞台上各图形的

8、分层顺序。位于较高图层中的图形显示在较低图层中的图形的上方。 3. 库面板是Flash显示Flash文档中的媒体元素列表的位置。 4. ActionScript代码可用来向文档中的媒体元素添加交互式内容。例如,可以添加代码以便用户在单击某按钮时显示一幅新图像,还可以使用ActionScript向应用程序添加逻辑。逻辑使应用程序能够根据用户的操作和其它情况采取不同的工作方式。Flash的ActionScript代码可以写在Flash文档内部,也可以写在外部。1。2 Flash的特点1. 使用矢量图形和流式播放技术。与位图图形不同的是,矢量图形可以任意缩放尺寸而不影响图形的质量;流式播放技术使得动

9、画可以边播放边下载,从而缓解了网页浏览者焦急等待的情绪。 2. 通过使用关键帧和图符使得所生成的动画(。swf)文件非常小,几K字节的动画文件已经可以实现许多令人心动的动画效果,用在网页设计上不仅可以使网页更加生动,而且小巧玲珑下载迅速,使得动画可以在打开网页很短的时间里就得以播放。 3. 把音乐,动画,声效互方式融合在一起,越来越多的人已经把Flash作为网页动画设计的首选工具,而且可以支持MP3的音乐格式,这使得加入音乐的动画文件也能保持小巧的身材。 4. 强大的动画编辑功能使得设计者可以随心所欲地设计出高品质的动画,通过ACTION可以实现交互性,使Flash具有更大的设计自由度,另外,

10、它与当今最流行的网页设计工具Dreamweaver配合默契,可以直接嵌入网页的任一位置,非常方便。1。3 Flash的发展现状与前景目前,FLASH动画越来越受到国人的关注。2001年前后,FLASH软件开始在中国的动画市场风行。这个由美国MACROMEDIA公司推出的一款多媒体动画制作软件,作为交互式动画设计工具,可以将音乐、声效和可动的画面方便地融合在一起,以制作出高品质的动态效果,造就了一种新的动画形式FLASH动画。短短几年时间,FLASH动画就从网络迅速推广到影视媒介,其发展速度之快,出乎很多人的意料。 FLASH动画最早通过网络流通,并随着网络技术的飞速发展,深入人们的日常生活。这

11、一优秀的矢量动画编辑工具给我们带来了强有力的冲击,使我们能够轻易地将丰富的想象力可视化。现如今,Flash已经逐渐被国内用户所认识和接受,并随之出现一大批忠实的追随者。在网络上,对FLASH动画贡献最大的要数那些“闪客”们了,无数年轻人借助FLASH技术实现了他们的创意和梦想。如边城浪子、老蒋、IM,等“闪客”们,为中国的FLASH动画事业做出了不可磨灭的贡献。中国有一千万人喜欢看FLASH,有七、八十万人喜欢做FLASH,作为MACROMEDIA中国用户联盟(CHINA;MMUG)秘书长,冯嵘认为这样的数字已经表明,一个有着大量需方和供方的市场已经形成。只有FLASH形成产业,找到自身的盈利

12、增长点,才能使“闪客”成为一种职业,进而促进更多优秀作品的出现。一些优秀作品对于推动FLASH动画事业也起到了不可低估的作用。近两年,各电视台动画频道也陆续播放由FLASH制作的动画片,如现在热播的喜羊羊和灰太狼,饮茶之功夫学园等,都受到了业内人士及大众的一致好评。可见,中国电视观众已经完全接受了FLASH动画这种新的艺术表现形式。短短几年时间,FLASH动画就从网络迅速推广到影视媒介,其发展速度之快,出乎很多人的意料。从FLASH软件本身特性来看,它在动画制作上较其他软件有很多优势和独到之处。首先,FLASH简单易学,容易上手。很多人不用经过专业训练,通过自学也能制作出很不错的FLASH动画

13、作品。其次,用FLASH制作出来的动画是矢量的,不管怎样放大、缩小,都不会影响画面质量,而且播放文件很小,便于在互联网上传输。它采用了流技术,只要下载一部分,就能欣赏动画,而且能一边播放一边传输送数据、FLASH有很多重要的动画特征,能实现较好的动画效果、FLASH的人机交互性可以让观众;通过点击按钮、选择菜单来控制动画的播放、最后,你可以建立FLASH电影,把动画输出为许多不同的文件格式,便于播放。正是有了这些优点,才使FLASH日益成为网络多媒体的主流。从动画制作工序和周期上来看,FLASH动画比传统动画在工序流程有一定简化和较多的削减,制作周期大为缩短传统动画片虽然有一整套制作体系保障它

14、的制作,但还是有难以克服的缺点。一部10分钟的普通动画片,要画几千张画面。像大家熟悉的(大闹天宫,1分钟的片长需要画10万多张画面。如此繁重而复杂的绘制任务,需要几十位动画作者,花费3年多时间才能最终完成。传统动画片在分工上非常复杂,要经过导演、美术设计师、原画、动画、绘景、描线、上色、校对、摄影、剪辑、作曲、对白配音、音乐录音、混合录音、洗印等十几道工序,才可以顺利完成。目前,FLASH动画主要分为商业用途和个人创作,包括产品广告、网站、故事短片、MTv等。FLASH作者从接到任务,到最后分布完成,差不多都是一个人。虽然FLASH动画相较于传统动画来说,在画面动作衔接上不太流畅,略显粗糙,但

15、是有自己特有的视觉效果。比如,画面往往更夸张起伏,以达到在最短时间内传达最深感受的效果,适应现代观众的审美需要。在制作周期上,半小时的节目,若用FLASH技术制作,大约34个月就可完成,若用其他技术通常需用10一14个月。从动画制作成本上来看,传统动画片制作成本最低也要10000元分钟,一部动画短片的制作成本至少需要几十万,还不包括广告费、播出费等。再加上市场运作与相关产品开发等,制作成本大大高于收入,也因此制约了传统动画片的发展。而FLASH动画制作成本非常低廉,只需一台电脑,一套软件,作者就可以制作出绘声绘色的FLASH动画,大大减少人力、物力资源以及时间上的消耗。在目前中国动画市场资金短

16、缺的环境张下,FLASH动画非常适合中国的国情。 总之,FLASH动画相对于传统动画的优势非常明显。当前,FLASH动画在中国的发展取得了一定的进展,但是全盛时代还没有到来。随着网络时代的到来,传统媒体和非传统媒体必将在相互竞争中不断向前发展,FLASH动画必将随着自身技术和形式上的更大突破,展现出更为广阔的前景。1。4 Flash游戏Flash游戏是由Flash动画演变而来,在游戏形式上的表现与传统游戏基本无异,但主要生存于网络之上,因为它的体积小、传播快、画面美观,所以大有取代传统web网游的趋势,现在国内外用Flash制作无端网游已经成为一种趋势,只要浏览器安装了ADOBE的Flash

17、player,就可以玩所有的flash游戏了,这比传统的web网游进步许多信息资料收集,需求分析对于Flash游戏而言,容量同比来说是最小的,而且占用时间很短,可以起到放松娱乐,休闲身心的作用,其具体有体积小、内容好、耐玩、娱乐性高、无年龄层次、能修改难度、有益身心健康、数量多、玩法丰富新颖等特色。1。5 Flash游戏的发展方向Flash被称为是“最为灵活的前台”。结合ActionScitp的对象和流程控制。使得在灵活的界面设计和动画设计中成为可能,但一直还未形成一套在flash中的界面设计理论。同时它也是最为小巧的前台。Flash具有跨平台的特性(这点和Java一样),所以无论你处于处于何

18、种平台,只要你安装有支持的Fash Player。你就能保证它们的最终显示效果都一致。而不必像在以前的网页设计中那样为IE和Mozilla或NetSpace各设计一个版本。同Java一样。它的可移植性很强。特别是在小型网络中和小型设备中(当然大型网络已不用说),最近具有的手机支持功能可以让你为自已的手机设计你喜爱的功能。当然你必需要有支持Flash的手机。当然它还可以应用于Pocket PC上。目前利用Flash开发出了许多夸平台的网络游戏,甚至可以匹敌大型MMOR,在3G时代到来以后,我们很快可以在手机上玩到大型网络游戏,现有的FLASH制作网络游戏有:SLG类(热血三国),体育类(热血球球

19、),RPG类(凡人修真),桌面(德州扑克),TD类(保卫家园)等等。FLASH小游戏的流行FLASH是开发的网页富媒体及强交互技术,最初用来研发交互式或动画网站组件,近几年获得了突飞猛进的发展。根据Adobe公司的统计,其互联网PC桌面普及率达到了惊人的99%,而JAVA为85。1%。目前FLASH更在大力向PDA及智能手机终端发展。FLASH技术包含一套可编程脚本解析器,称为ActionScript,使用与Java及Javascript类似语法,可以控制FLASH动画,实现多种交互功能。AS3。0更支持了Socket联网功能,使得开发大型交互式网页游戏成为可能。凭借ActionScript2

20、。0及ActionScript3。0的出色表现,FLASH技术成为了绝大多数小游戏开发的技术基础。 FLASH的解析器,称为Flash Player,体积十分小巧。不仅可以支持流行的IE浏览器,还可以支持Firefox, Opera, Safari等多款浏览器,用户下载安装非常方便。这也是Flash小游戏流行的重要原因之一。第2章 游戏设计思路2。1 坦克大战的玩法和技术评分坦克大战是经典的键盘类小游戏,玩家通过键盘的上下左右控制一两小坦克移动、CTRL发射子弹来击毁敌人。击毁的敌人越多,得分越高;如果被敌人击毁,则游戏失败。游戏失败后如果想重新开始坦克大战只需要按下SPACE即可。屏幕左上角

21、有玩家的生命值,每击毁一辆敌军坦克则自动增加一定数量的生命,若生命值的宽度为0,则游戏失败。屏幕上方显示了玩家当前的分数值,击毁的坦克越多,则得分越高,右上方为领主血量统计,只有当领主存在时它才会显示出来。在游戏运行中,每隔一定时间就会在游戏区的任意一个位置刷新出一辆普通敌军坦克,玩家需要将他们一一击毁,当游戏运行一段时间后,领主坦克将出现在游戏区中,这时普通敌军坦克将会停止刷新,领主有专用的子弹和身躯。玩家只需要一对一的对付领主,将其击毁,如果将领主击毁后,将会自动进入下一关。2。2 坦克大战的框架与交互元件的组成坦克大战包含了以下元件:1。 游戏布局元件,如图2。2。1所示。游戏布局元件是

22、所有对象的一个容器,其他所有的对象都在它的内部,便于游戏的管理和游戏数据的存储。图2。2。1 游戏布局元件2. 关卡元件,如图2。2。2所示。关卡元件中包含了八个墙对象,它是一个逐帧动画,每一帧中8面墙的大小和摆放都不一样,模拟每一个关卡的界面。图2。2。2 关卡元件3。 墙元件,如图2。2。3所示。墙元件存在与关卡元件中,它的作用是阻挡玩家、敌人和子弹。图2。2。3 墙元件4。 玩家元件,如图2。2。4所示。玩家类使用了键盘控制系统来操作玩家坦克在关卡中移动,同时还会发射子弹。图2。2。4 玩家元件5。 子弹元件,如图2。2。5所示。子弹元件特指玩家发射的子弹,它的功能是击毁敌人。图2。2。

23、5 子弹元件6。 敌人元件,如图2。2。6所示。敌人元件在游戏中作为普通敌人,能向上下左右四个方向自主进行移动和射击。图2。2。6 敌人元件7。 敌人子弹元件,如图2。2。7所示。敌人子弹为普通敌人发射的子弹,能向上下左右四个方向移动,攻击力较小,若玩家与之碰撞会损失一定生命值。图2。2。7 敌人子弹元件8。 领主元件,如图2。2。8所示。领主是每个关卡的最后一个敌人,能在游戏中任意移动不受墙的约束并且拥有自己的生命值,与普通敌人一样也能自主移动和射击。图2。2。8 领主元件9。 领主子弹元件,如图2。2。9所示。领主子弹是领主发射的专用子弹,能全方位360度移动,攻击力非常强大,与玩家碰撞则

24、会损失大量生命值。图2。2。9 领主子弹元件10。 生命值元件,如图2。2。10所示。用以显示玩家的生命值,本身不具备代码,在游戏中通过判断其宽度来确定玩家是否被击毁。图2。2。10 生命值元件11。 游戏结束元件,如图2。2。11所示。游戏结束元件是当玩家坦克被击毁时,用于显示玩家的得分、军衔等级和游戏帮助的界面。图2。2。11 游戏结束元件2。3 坦克大战游戏算法设计由于坦克大战游戏只有失败界面,没有过关界面,所以游戏算法不是开始结束型流程,它由两个大循环组成。第一个大循环为游戏循环,即击毁敌军来提升分数的循环。第二个大循环为初始化的循环,即玩家失败后游戏可以重新开始。第一个大循环游戏循环

25、也由两个循环构成,第一个是敌人的循环,每过一定时间就会刷新出一辆普通坦克,在普通坦克刷新出一定数量时刷新出一辆领主坦克。第二个循环为关卡循环,每关开始时,每过一定时间刷新一辆普通坦克,再过一定时间刷新一辆领主坦克,当领主坦克在场时,普通坦克不会再次被刷新出,当领主坦克被击毁时,重复关卡开始时的循环。算法流程图如图2。3。1所示。图2。3。1 坦克大战算法流程图第3章 坦克大战游戏实现 3。1 游戏布局游戏布局元件是整个游戏元件,其他所有的元件都是游戏布局元件的子对象,如果将其删除那舞台上将不会存在任何对象,界面如图3。1。1所示。游戏布局元件包含两大部分,第一是功能图层,其中包含了游戏的功能性

26、元件,例如玩家、关卡和生命值等;第二是特效图层,在图3。1。1中以“boom”开头的图层均为特效图层。图3。1。1 游戏布局设计界面3。1。1 游戏主界面游戏布局元件包含了特效图层和功能图层。特效图层为带有“boom”的图层,在游戏时能让画面闪烁,增加动感。功能图层部分中的玩家图层包含玩家元件(Player)、游戏结束图层包含游戏结束元件(GameOver)、关卡图层包含关卡元件(GuanQia)、生命图层包含玩家生命值元件(Health)、游戏边框图层包含游戏区域和游戏背景。其中红色边框为舞台区域,游戏运行时舞台区域以外的元件是不可见的。3。1。2 全局脚本全局脚本即游戏布局(State)元

27、件的的脚本(State。as),它具有以下作用:1. 存储游戏数据。游戏数据包含了下列变量:public var bulletX:Number; /玩家子弹的横坐标public var bulletY:Number; /玩家子弹的纵坐标public var enemyX:Number; /敌人的横坐标public var enemyY:Number; /敌人的纵坐标public var bossX:Number;/领主的横坐标public var bossY:Number;/领主的纵坐标public var i:Number;/敌人出现延时public var j:Number;/领主出现延时

28、public var bulletCS:Bullet;/玩家子弹参数public var buNum:Number=0;/玩家子弹数(控制在1之内)public var score_:int=0;/分数private var init_:Boolean=false;/是否可以初始化public var d:Number;/屏幕抖动参数public var des:Number;/玩家子弹攻击力(只适用于领主)public var bossH:Number;/领主生命值2. 实现游戏特效。游戏,在flash中是一个可以被玩家控制的影片剪辑,所以游戏布局元件也有他自己的时间轴,有了时间轴就有了帧,

29、每一帧都是一个静态的图片,根据帧频快速播放后就形成了动画。游戏特效建立在下面这个函数上 onEnterFrame_(),它的作用是影片每一次播放一个帧,此函数都会运行一次。现在主流的Flash游戏帧频都是60fps,所以onEnterFrame_()函数每秒都要运行60次。在此款坦克大战游戏中,由函数控制的特效有两个:第一是屏幕抖动(DouDong()),他模仿了击毁敌人使的空气震动效果。在抖动函数中有两条语句,它们的作用是让整个State元件在横坐标上随机移动-22像素,纵坐标随机移动-22像素,实现屏幕抖动功能。onEnterFrame_()函数控制了屏幕抖动参数d,如果d6,则屏幕静止不

30、动,每次抖动d都会自动增加1,直到d大于6为止,避免屏幕一直抖动不停。如果屏幕静止了,则让d等于20,避免d无限增大下去。第二个特效为全屏渐变,在游戏中全屏渐变的元件都添加在前面带有boom的图层中,不同的图层有不同的颜色和效果,比如游戏开始时,整个屏幕从一团白色中渐变出来,模拟了士兵上战场的特效。3. 控制游戏进程。在上面的参数中,我们可以看到有两个参数,i和j,他们就是控制游戏进程的参数。一个新关卡开始时,i=0,每一帧i自动增加1,当i大于120时,则会生成一个普通的敌军坦克,并且i再次等于0,实现了敌军不断增援的效果。同理,j开始也等于0,当j大于3000时,将会出现一个领主坦克,领主

31、坦克出现时,i和j等于一个极大的负值,这样就不会继续出现敌军普通坦克和领主坦克。参数des,这是玩家坦克对领主的伤害值,它的初始值为0。2,我们在这里规定它不小于0。05。参数bossH,这是领主的生命值,是由领主类的一个计算方法得出的,它显示了玩家要击毁领主需要多少颗子弹。在游戏结束时,如果玩家要重新开始游戏,则需要对游戏进行初始化,初始化的参数是init_。4. 评判玩家技术。在游戏中,每击毁一辆敌军坦克都会增加分数。在游戏结束时,GameOver元件会从舞台外部移动到内部,并且系统会根据分数判定你的军衔等级,军衔等级包括新兵、上等兵、中尉、少将等等。3。2 玩家类玩家类是影片剪辑类,但它

32、实际是一个简单的图形,并且有一个图层,如图3。2。1所示。图3。2。1 玩家元件设计界面3。2。1 玩家坦克的移动玩家坦克有自己的横坐标x,纵坐标y。在玩家类中需要添加键盘监听器,在玩家类中,同样拥有自己的onEnterFrame_()函数。类中负责玩家移动的参数是vx和vy,它们是横坐标和纵坐标上的速度,实现玩家移动效果只需要将两句代码加入到onEnterFrame_()函数中,即x+=vx; y+=vy; 为了不让玩家超出移动范围,需要将玩家的横纵坐标限制在一个矩形范围内,并且根据键盘的按键来判断坦克的旋转角度。代码如下:private function onEnterFrame_(e:E

33、vent):voidx+=vx;y+=vy;if (x1125)x=1125;if (x625)y=625;if (y125)y=125;if (fangxiang=1)rotation=0;if (fangxiang=2)rotation=90;if (fangxiang=3)rotation=180;if (fangxiang=4)rotation=270;玩家在移动时,通过按键盘上上下左右,坦克会随着按键进行和移动旋转,让坦克的炮口对着移动的方向。如果放开按键,则速度等于0。实现方法如下:在舞台中加入键盘按下和弹起事件的监听器:public function Player():voids

34、tage。addEventListener(KeyboardEvent。KEY_DOWN,onKeyDown_);stage。addEventListener(KeyboardEvent。KEY_UP,onKeyUp_);addEventListener(Event。ENTER_FRAME,onEnterFrame_);编写键盘按下事件的方法:private function onKeyDown_(ev:KeyboardEvent):voidif (ev。keyCode=Keyboard。UP)/按下上vy=-6;vx=0;fangxiang=1;if (ev。keyCode=Keyboard

35、。DOWN)/按下下vy=6;vx=0;fangxiang=3;if (ev。keyCode=Keyboard。LEFT)/按下左vx=-6;vy=0;fangxiang=4;if (ev。keyCode=Keyboard。RIGHT)/按下右vx=6;vy=0;fangxiang=2;编写键盘按键弹起事件的方法:private function onKeyUp_(eve:KeyboardEvent):voidif (eve。keyCode=Keyboard。UP) /放开上if (vy0)vy=0;if (eve。keyCode=Keyboard。LEFT) /放开左if (vx0)vx=0

36、;3。2。2 玩家坦克发射子弹在经典坦克游戏中,玩家发射的子弹上限只能有一个。这个功能的实现很简单,在玩家类中添加一个子弹数的参数(buNum),只有当它等于0,也就是舞台上没有玩家子弹时,才能发射子弹,这样就保证了子弹数的唯一。发射子弹的原理就是用Flash中的addChild方法添加一个玩家子弹类的实例,具体实现方法如下:在onEnterFrame()函数中添加代码判断玩家发射的子弹数。if (MovieClip(parent)。buNum1)isArmed=true; /isArmed为true说明当前可以发射子弹在键盘按下事件方法中加入发射子弹的代码。if (ev。keyCode=Ke

37、yboard。CONTROL)if (isArmed)MovieClip(parent)。buNum=1;var bu:Bullet= new Bullet();MovieClip(parent)。addChild(bu);isArmed=false; /发射完毕后不能再次发射子弹3。3 玩家子弹类玩家子弹类同样是一个静态的图片,但是在子弹元件中添加了发光滤镜,如图3。3。1所示。图3。3。1 玩家子弹元件设计界面3。3。1子弹的速度与方向子弹的速度也分横坐标的速度和纵坐标的速度,分别为vx和vy,由于子弹实例是由玩家类创建,所以子弹一被创建就会有一个固定的速度和方向,定义一个变量_Bulle

38、tFX来表示子弹的飞行方向,子弹要获取方向要用到以下语句:_BulletFX=MovieClip(parent)。player。fangxiang; 其中MovieClip(parent)表示子弹的父级对象,即State元件,通过点方法找到玩家类中的方向参数(fangxiang),通过方向值,改变横坐标和纵坐标的速度,这样子弹就会沿着玩家坦克面对的方向发射了。具体实现方法如下:添加加载到舞台事件函数。public function Bullet():voidaddEventListener(Event。ADDED_TO_STAGE,onATS_); /只有当子弹被加载到舞台时才会触发onATS

39、_内部的代码编写加载到舞台时的事件方法。public function onATS_(e:Event):voidvx=0;vy=0;/让子弹在被加载时赋予子弹方向和速度_BulletFX=MovieClip(parent)。player。fangxiang; /获取玩家的方向,由于子弹与玩家同方向,所以可以直接赋值if (_BulletFX=1)x=MovieClip(parent)。player。x;y=MovieClip(parent)。player。y-20;vy+=-15;if (_BulletFX=2)x=MovieClip(parent)。player。x+20;y=MovieCl

40、ip(parent)。player。y;vx+=15;if (_BulletFX=3)x=MovieClip(parent)。player。x;y=MovieClip(parent)。player。y+20;vy+=15;if (_BulletFX=4)x=MovieClip(parent)。player。x-20;y=MovieClip(parent)。player。y;vx+=-15;/加载子弹删除和进入帧的事件方法addEventListener(Event。REMOVED_FROM_STAGE,onRFS_);当子弹被删除时,同时删除时间监听器public function onRFS

41、_(e:Event):voidremoveEventListener(Event。ADDED_TO_STAGE,onATS_);removeEventListener(Event。REMOVED_FROM_STAGE,onRFS_);removeEventListener(Event。ENTER_FRAME,onEnterFrame_);3。3。2 子弹的碰撞子弹被创建之后,第一步先要将被创建的子弹“上传”到父级类(State)中的bulletCS参数中,因为要保证碰撞的唯一性,检测敌人与子弹的碰撞就写在了敌人类中。子弹类中碰撞是检测子弹与墙和边框的碰撞,子弹撞到了墙或者超出了边框,则子弹自身

42、被删除,玩家类中的子弹数(buNum)变为0,子弹消失后玩家便可以再次发射出子弹。下面为具体实现方法:在加载到舞台事件函数中添加进入帧事件监听器。addEventListener(Event。ENTER_FRAME,onEnterFrame_);编写进入帧事件函数。private function onEnterFrame_(e:Event):voidx+=vx;y+=vy;MovieClip(parent)。bulletCS=this;/将自身赋值到State类的bulletCS参数中方便其他类调用/当子弹碰到墙后删除子弹if (this。hitTestObject(MovieClip(pa

43、rent)。guan。q1)MovieClip(parent)。buNum=0;parent。removeChild(this);else if (this。hitTestObject(MovieClip(parent)。guan。q2)MovieClip(parent)。buNum=0;parent。removeChild(this);else if (this。hitTestObject(MovieClip(parent)。guan。q3)MovieClip(parent)。buNum=0;parent。removeChild(this);else if (this。hitTestObject(MovieClip(parent)。guan。q4)MovieClip(parent)。buNum=0;parent。removeChild(this);else if (this。hitTestObject(MovieClip(parent)。guan。q5)MovieCl

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1