资源预览内容
第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
亲,该文档总共7页全部预览完了,如果喜欢就下载吧!
资源描述
目前为止,我们的游戏主要用到的类有:FireBullet(主人公发炮弹的类)、 Bullet(怪物发炮弹的类)、First(第一关的类)、Player(控制主人公的类)、 Robot_Follow(一个会跟随并且攻击的怪物类)、Wall(障碍物的类). 先来阐述下我的设计思想,每个关卡都可以做成一个影片剪辑,让然后让它绑 定(也可以说成)导出一个类,当这个影片剪辑放到舞台上时,一运行程序, 所绑定的代码就会运行起来,例如第一关的影片剪辑绑定的就是 First 这个类. 我来简单说明下每个类都做了什么工作。 首先最简单的就是 wall 这个类。 package import flash.events.Event; import flash.display.MovieClip;public class Wall extends MovieClip public function Wall() / constructor code addEventListener(Event.ENTER_FRAME,onenterframe); private function onenterframe(evt:Event):void MovieClip(parent).playerandplatform(MovieClip(parent)._player,this,- 0.2,0); 这个类很简单,就是用来检测障碍物是否与主人公发生碰撞,playerandplatform 是写在 First 这个类里面的碰撞检测函数,这个函数的功能就是当主人公碰到障 碍物就不能前进,以及跳到障碍物上面还可以继续跳跃(也许你会不明白什么 叫“继续跳跃” ,没有这个函数的话,当主人公跳到障碍物上面,它就会滑下来, 你按空格键它都没反映的) 。MovieClip(parent),parent 指的是第一关的影片剪 辑,因为障碍物是在第一关的影片剪辑里面,然后前面有一个的 MovieClip(MovieClip(parent))就是强制转换。 接下来介绍下 Bullet 类,这个类是管理炮弹的 package import flash.display.MovieClip; import flash.events.Event; import flash.filters.BevelFilter; import flash.filters.BitmapFilterQuality;public class Bullet extends MovieClip private const STAR:uint = 1; private const CIRCLE:uint = 2; private const SQUARE:uint = 3;private var _vx:Number; private var _vy:Number; private var _ax:Number; private var _ay:Number; private var _angle:Number; private var _bevel:BevelFilter; private var _bulletType:String;public function Bullet(vx:Number, vy:Number, startX:Number, startY:Number, bulletType:String) this._vx = vx; this._vy = vy; this.x = startX; this.y = startY;switch (bulletType) case “star“ : gotoAndStop(STAR); break;case “circle“ : gotoAndStop(CIRCLE); break;case “square“ : gotoAndStop(SQUARE); break;default : gotoAndStop(CIRCLE); this._bulletType = bulletType;addEventListener(Event.ADDED_TO_STAGE, onaddtostage);_bevel = new BevelFilter(); _bevel.distance = 3; _bevel.angle = 120; _bevel.quality = BitmapFilterQuality.LOW; private function onaddtostage(event:Event):void addEventListener(Event.ENTER_FRAME, onenterframe); addEventListener(Event.REMOVED_FROM_STAGE, onremovedfromstage);dispatchEvent(new Event(“bulletCreated“, true);removeEventListener(Event.ADDED_TO_STAGE, onaddtostage); private function onremovedfromstage(event:Event):void removeEventListener(Event.ENTER_FRAME, onenterframe); removeEventListener(Event.REMOVED_FROM_STAGE, onremovedfromstage); private function onenterframe(event:Event):void this.x += _vx; this.y += _vy; this.rotation += 20; public function get bulletType():String return _bulletType; 先不看代码,打开 Bullet 这个影片剪辑,你会发现有 3 个关键帧,每一个帧有 一种炮弹。 private const STAR:uint = 1; private const CIRCLE:uint = 2; private const SQUARE:uint = 3; 这三个常量就是代表帧的数字(有点讲得不是很明白哈,不急,下面给你将详 细点) 。先来看一下构造函数 public function Bullet(vx:Number, vy:Number, startX:Number, startY:Number, bulletType:String) 构造函数有 5 个参数 vx:Number:炮弹在 x 方向的速度,如果你的炮弹只在 x 方向运动,那么 y 方向 的速度参数要设为 0.vy:Number:炮弹在 y 方向的速度,如果你的炮弹只在 y 方向运动,那么 x 方向 的速度参数要设为 0. startX:Number:炮弹刚出现在舞台的 x 坐标 startY:Number:炮弹刚出现在舞台的 y 坐标 bulletType:String:炮弹的类型,就是前面那个 3 个常量了,如果你传入一个“circle” ,它就会发出一个圆形的炮弹,现在来看一下它是怎么根据bulletType:String 这个参数来发出不同的炮弹。在构造函数里面有一个 switch 判 断语句 switch (bulletType) case “star“ : gotoAndStop(STAR); break;case “circle“ : gotoAndStop(CIRCLE); break;case “square“ : gotoAndStop(SQUARE); break;default : gotoAndStop(CIRCLE); 现在很明白了,它会根据构造函数传进来的 bulletType:String 来选择发哪一种炮 弹,然后构造函数里面还有一段滤镜的代码: _bevel = new BevelFilter(); _bevel.distance = 3; _bevel.angle = 120; _bevel.quality = BitmapFilterQuality.LOW; BevelFilter 是斜角滤镜,distance、angle、quality 是 BevelFilter 这个类的属性, 你可以去翻一下帮助文档 (flash.filters.BevelFilter;、flash.filters.BitmapFilterQuality;) 。 构造函数里面还有一句代码 addEventListener(Event.ADDED_TO_STAGE, onaddtostage); 这是什么意思呢,其实就是初始化函数(为什么这样说呢,以前我们在构造函 数里面会写上一个 init()的函数,但现在已经被上面的那句代码取代了,就是 说当影片剪辑添加到舞台上它才开始执行 onaddtostage 函数里面的代码) ,这代 码就是 wall 这个类侦听一个添加到舞台的事件,还要注意一点 addEventListener(Event.ADDED_TO_STAGE, onaddtostage);前面其实是省略是 this 关键字,这个 stage.addEventListener(Event.ADDED_TO_STAGE, onaddtostage);是不同的。,再来看 onaddtostage 这个函数里面的代码 private function onaddtostage(event:Event):void addEventListener(Event.ENTER_FRAME, onenterframe); addEventListener(Event.REMOVED_FROM_STAGE, onremovedfromstage); dispatchEvent(new Event(“bulletCreated“, true); removeEventListener(Event.ADDED_TO_STAGE, onaddtostage); 在这里你可能不懂 dispatchEvent(new Event(“bulletCreated“, true);是什么意思, 其实就是发送一个事件,这个事件的名字叫“bulletCreated“,换句话说,这个事 件是我们自己写的,这个事件有什么用呢,暂时先不说,在后面用到再解释,再 强调一下,就是说当子弹添加到舞台上,它就会发出一个“bulletCreated“事件。 Bullet 这个类的主要功能就先介绍到这里。 再来看 Player 这个类,这个类控制了主人公的移动和发炮弹(按 A 就发炮弹) 这些类都是可以通信的,主人公的发炮弹是用到了 FireBullet 类,这个类和 Bullet 是差不多一样的,所以在这里不解释。这些类怎么通信呢,先来在 Player 里面创建一个炮弹的代码,这段代码在 Player 类的 private function onkeydown(evt:KeyboardEvent):void 里面: if (evt.keyCode = Keyboard.A) var buttet:FireBullet = new FireBullet(5,0,this.x,this.y,_flag); parent.addChild(buttet); 在这里你会看到 FireBullet 这个类(var buttet:FireBullet = new FireBullet(5,0,this.x,this.y,_flag);) 然后你还会发现 Player 里面有很多 get 和 set 的方法,get 和 set 的方法都是用来 进行通信的,你可以翻一下书找一下 g
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号