游戏玩法:
这个游戏当中,飞机会不断的从屏幕左边或右边飞过来,通过键盘左右移动防空炮,并按空格键发出炮弹,玩家的炮弹数是有限 的,当弹尽则表示游戏结束。
游戏的主要思路:
1、随机创建飞机,并让飞机移动;
2、如何实现键盘控制防空炮;
3、判断击中情况,并处理;
准备工作:
元件:会有三个MovieClip。一个叫AAGun,是防空炮,一个是Bullet,是子弹。
还有一个最重要的Airplane,它有10个帧组成,1到5帧分别为5种不同类型的飞机,第6帧为explode,第10帧有帧代码,parent.removeChild(this);
stop;
作用是播到此帧时父容器将此MovieClip移除。(以上3个MovieClip都有链接,注意加上)
除此之外还有一个常规按钮;
舞台设置:
一共有三帧。
第一帧,有个开始按钮,实例名为startButton,帧代码为
stop();
startButton.addEventListener(MouseEvent.CLICK,clickStart);
function clickStart(event:MouseEvent) {
gotoAndStop("play");
}
很容易理解,单击跳到第2帧,即游戏开始帧。
第二帧,为startAirRaid();调用游戏主函数,开始游戏。
舞台下方有个"shotsLeft"文本框,它的作用是显示剩余可用的球数。舞台中央有个”gameMessage“,是用来显示游戏信息的。
第三帧,有个重玩按钮,实例名为playAgainButton,帧代码为:
playAgainButton.addEventListener(MouseEvent.CLICK,clickPlayAgain);
function clickPlayAgain(event:MouseEvent) {
gotoAndStop("play");
}
点击重新开始游戏。
舞台上有两个动态文本框,实例名分别为showscore和showShots,分别用来显示分数和剩余子弹数。
游戏代码:
此游戏有4个类,即AAGun,Bullet,AirPlane,AirRaid.
—————————————————我是优美的长分割线—————————————————————
AAGun是防空炮类:
package { import flash.display.*; import flash.events.*; import flash.utils.getTimer; public class AAGun extends MovieClip { static const speed:Number = 150.0;//设置速度 private var lastTime:int; //用来实现运动的时间变量 public function AAGun() { // 炮的初始位置 this.x = 275; this.y = 340; this.rotation = -90; // 事件侦听来实现运动 addEventListener(Event.ENTER_FRAME,moveGun); } public function moveGun(event:Event) { // 获取时间差 var timePassed:int = getTimer()-lastTime; lastTime += timePassed; // 当前位置 var newRotation = this.rotation; // 移到左边 if (MovieClip(parent).leftArrow) { newRotation -= speed*timePassed/1000; } // 移到右边 if (MovieClip(parent).rightArrow) { newRotation += speed*timePassed/1000; } // 检查边界 if (newRotation < -170) newRotation = -170; if (newRotation > -20) newRotation = -20; // 重定位 this.rotation = newRotation; } // 从屏幕移除,同时移除事件侦听器 public function deleteGun() { parent.removeChild(this); removeEventListener(Event.ENTER_FRAME,moveGun); } } }
—————————————————我是优美的长分割线—————————————————————
下一个类是Bullet,即子弹类:
package { import flash.display.*; import flash.events.*; import flash.utils.getTimer; public class Bullet extends MovieClip { private var dx,dy:Number; //速度 private var lastTime:int; //rot 度 public function Bullet(x,y:Number,rot: Number,speed: Number) { // 设置开始位置 var initialMove:Number = 35.0; this.x = x + initialMove*Math.cos(2*Math.PI*rot/360); this.y = y + initialMove*Math.sin(2*Math.PI*rot/360); this.rotation = rot; // 获得速度 dx = speed*Math.cos(2*Math.PI*rot/360); dy = speed*Math.sin(2*Math.PI*rot/360); // 设置动画 lastTime = getTimer(); addEventListener(Event.ENTER_FRAME,moveBullet); } public function moveBullet(event:Event) { // 获取经过的时间 var timePassed:int = getTimer()-lastTime; lastTime += timePassed; // 移动炮弹 this.x += dx*timePassed/1000; this.y += dy*timePassed/1000; //炮弹在屏幕顶部飞离 if (this.y < 0) { deleteBullet(); } } // 将炮弹从舞台和列表中删除 public function deleteBullet() { MovieClip(parent).removeBullet(this); parent.removeChild(this); removeEventListener(Event.ENTER_FRAME,moveBullet); } } }
—————————————————我是优美的长分割线—————————————————————
最后一个为主类:
package { import flash.display.*; import flash.events.*; import flash.utils.Timer; import flash.text.TextField; public class AirRaid2 extends MovieClip { private var aagun:AAGun;//声明防空炮对象 private var aagunbase:AAGunBase; private var airplanes:Array;//飞机对象 private var bullets:Array;//子弹对象 public var leftArrow,rightArrow:Boolean;//代表当前玩家的按键状 private var nextPlane:Timer;//产生飞机的计时器 private var shotsLeft:int;//剩余子弹数 private var shotsHit:int;//击中目标数 public function startAirRaid() { // 初始化数据 shotsLeft = 20; shotsHit = 0; showGamescore();//更新舞台上的文本框 // 创建防空炮 aagun = new AAGun(); addChild(aagun); aagunbase = new AAGunBase(); addChild(aagunbase); aagunbase.x = aagun.x; aagunbase.y = aagun.y; // 创建子弹的数组和飞机的数组 airplanes = new Array(); bullets = new Array(); // 键盘侦听 stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownFunction); stage.addEventListener(KeyboardEvent.KEY_UP,keyUpFunction); // 检测碰撞 addEventListener(Event.ENTER_FRAME,checkForHits); // 执行产生飞机的函数 setNextPlane(); } public function setNextPlane() { nextPlane = new Timer(1000+Math.random()*1000,1);//设定计时器 //时间间隔1--2秒的函数 nextPlane.addEventListener(TimerEvent.TIMER_COMPLETE,newPlane); nextPlane.start(); } public function newPlane(event:TimerEvent) { //随机飞机的高度、速度和方向 if (Math.random() > .5) { var side:String = "left"; } else { side = "right"; } var altitude:Number = Math.random()*50+20;//这里的高度并不是飞机相对地面的高度,因为顶部y=0,这里的高度是相对于顶部来说的。 var speed:Number = Math.random()*150+150; // 创建的飞机,加入到舞台并加入到数组 var p:Airplane = new Airplane(side,speed,altitude); addChild(p); airplanes.push(p); // 自动函数设置下一架飞机的生成 setNextPlane(); } // 检测碰撞 public function checkForHits(event:Event) { for(var bulletNum:int=bullets.length-1;bulletNum>=0;bulletNum--){ //遍历所有的子弹 for (var airplaneNum:int=airplanes.length-1;airplaneNum>=0;airplaneNum--) {//遍历所有的飞机 if (bullets[bulletNum].hitTestObject(airplanes[airplaneNum])) { airplanes[airplaneNum].planeHit();//执行飞机被击中的函数 bullets[bulletNum].deleteBullet();//删除子弹 shotsHit++;//分数加1 showGamescore();//更新文本框 break;//跳出循环 } } } if ((shotsLeft == 0) && (bullets.length == 0)) { endGame();//检测子弹剩余是否为0,如果是则游戏结束 } } // 监听按键 public function keyDownFunction(event:KeyboardEvent) { if (event.keyCode == 37) { leftArrow = true; } else if (event.keyCode == 39) { rightArrow = true; } else if (event.keyCode == 32) { fireBullet(); } } // 监听按键弹起 public function keyUpFunction(event:KeyboardEvent) { if (event.keyCode == 37) { leftArrow = false; } else if (event.keyCode == 39) { rightArrow = false; } } // 开火,创建子弹 public function fireBullet() { if (shotsLeft <= 0) return;//子弹小于0,跳出函数 var b:Bullet = new Bullet(aagun.x,aagun.y,aagun.rotation,300);//创建子弹对象 addChild(b);//加入到舞台和数组 bullets.push(b); shotsLeft--;//子弹数减一 showGamescore();//更新文本 } //更新文本,将分数和子弹显示在文本框中 public function showGamescore() { showscore.text = String("score: "+shotsHit); showShots.text = String("Shots Left: "+shotsLeft); } // 执行函数执行将指定的飞机移除 public function removePlane(plane:Airplane) { for(var i in airplanes) { if (airplanes[i] == plane) { airplanes.splice(i,1); break; } } } // 同上,将子弹移除数组 public function removeBullet(bullet:Bullet) { for(var i in bullets) { if (bullets[i] == bullet) { bullets.splice(i,1); break; } } } // 游戏结束函数 public function endGame() { // 移除飞机 for(var i:int=airplanes.length-1;i>=0;i--) { airplanes[i].deletePlane(); } airplanes = null;//将数值置空 aagun.deleteGun();//移除防空炮 aagun = null; removeChild(aagunbase); aagunbase = null; //移除各种侦听 stage.removeEventListener(KeyboardEvent.KEY_DOWN,keyDownFunction); stage.removeEventListener(KeyboardEvent.KEY_UP,keyUpFunction); removeEventListener(Event.ENTER_FRAME,checkForHits); //停止计时器,将其置空 nextPlane.stop(); nextPlane = null; //跳到游戏结束帧 gotoAndStop("gameover"); } } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。