flash as3.0气球游戏

原创 2012年06月27日 17:33:58

我们需要一个大炮和一个底座,大炮可以旋转,而底座固定不动。通过键盘控制射击五颜六色的气球,击中气球显示爆炸的效果,气球消失。

时间轴上共三帧,intro、play和gameover,需要多个级别的排布。level1气球排练成简单的长方形,2级的时候排列成圆形,3级排列成两组圆形。

 

package {
	import flash.display.*;
	import flash.events.*;
	import flash.text.TextField;
	
	public class BalloonPop extends MovieClip {
		
		// 显示对象
		private var balloons:Array;
		private var cannonball:Cannonball;
		private var cannonballDX, cannonballDY:Number;
		
		// 按键
		private var leftArrow, rightArrow:Boolean;
		
		// 游戏属性
		private var shotsUsed:int;//跟踪炮弹的数量
		private var speed:Number;//速度
		private var gameLevel:int;//级别
		private const gravity:Number = .05;//重力
		
		public function startBalloonPop() {
			gameLevel = 1;
			shotsUsed = 0;
			speed = 6;
			gotoAndStop("level1");
		}
		
		public function startLevel() {
			showGameScore();
			
			// 创建对象数组
			findBalloons();
			
			// 侦听键盘
			stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownFunction);
			stage.addEventListener(KeyboardEvent.KEY_UP,keyUpFunction);
			
			// 检测碰撞
			addEventListener(Event.ENTER_FRAME,gameEvents);

		}
		
		public function findBalloons() {
			balloons = new Array();
			
			// 遍历所有的显示对象
			for(var i:int=0;i<numChildren;i++) {
				
				// 判断当前显示对象是否是气球
				if (getChildAt(i) is Balloon) {
					
					// 如果是,得到随机的气球颜色
					MovieClip(getChildAt(i)).gotoAndStop(Math.floor(Math.random()*5)+1);
					
					// 添加到气球列表
					balloons.push(getChildAt(i));
				}
			}
		}
		
		public function gameEvents(event:Event) {
			moveCannon();
			moveCannonball();
			checkForHits();
		}
		
		public function moveCannon() {
			var newRotation = cannon.rotation;
			
			if (leftArrow) {
				newRotation -= 1;
			}
			
			if (rightArrow) {
				newRotation += 1;
			}
			
			//判断边界  约定在-90°和-20°  -90°是朝上的
			if (newRotation < -90) newRotation = -90;
			if (newRotation > -20) newRotation = -20;
			
			//重定位
			cannon.rotation = newRotation;
		}

		public function moveCannonball() {
			
			// 只有当炮弹存在时才移动
			if (cannonball != null) {
				
				// 改变位置
				cannonball.x += cannonballDX;
				cannonball.y += cannonballDY;
				
				// 增加重力
				cannonballDY += gravity;
				
				// 判断炮弹是否落到地面
				if (cannonball.y > 340) {
					removeChild(cannonball);
					cannonball = null;
				}
			}
		}
		
		// 碰撞检测
		public function checkForHits() {
			if (cannonball != null) {
				
				// 遍历所有的气球
				for (var i:int=balloons.length-1;i>=0;i--) {
					
					// 判断他是否与炮弹接触
					if (cannonball.hitTestObject(balloons[i])) {
						balloons[i].gotoAndPlay("explode");
						break;
					}
				}
			}
		}
		
		// 按下键
		public function keyDownFunction(event:KeyboardEvent) {
			if (event.keyCode == 37) {
				leftArrow = true;
			} else if (event.keyCode == 39) {
				rightArrow = true;
			} else if (event.keyCode == 32) {
				fireCannon();
			}
		}
		
		// 释放键
		public function keyUpFunction(event:KeyboardEvent) {
			if (event.keyCode == 37) {
				leftArrow = false;
			} else if (event.keyCode == 39) {
				rightArrow = false;
			}
		}

		// 发射炮弹
		public function fireCannon() {
			if (cannonball != null) return;
			
			shotsUsed++;
			showGameScore();
			
			// 创建炮弹
			cannonball = new Cannonball();
			cannonball.x = cannon.x;
			cannonball.y = cannon.y;
			addChild(cannonball);
			
			// 将大炮和底座移到上面
			addChild(cannon);
			addChild(cannonbase);
			
			// 设置炮弹的方向
			cannonballDX = speed*Math.cos(2*Math.PI*cannon.rotation/360);
			cannonballDY = speed*Math.sin(2*Math.PI*cannon.rotation/360);
		}
		
		// 气球回调函数,将自己移除
		public function balloonDone(thisBalloon:MovieClip) {
			
			// 从屏幕中移除
			removeChild(thisBalloon);
			
			// 从数组中查找和移除
			for(var i:int=0;i<balloons.length;i++) {
				if (balloons[i] == thisBalloon) {
					balloons.splice(i,1);
					break;
				}
			}
			
			// 查看气球是否被消灭
			if (balloons.length == 0) {
				cleanUp();
				if (gameLevel == 3) {
					endGame();
				} else {
					endLevel();
				}
			}
		}
		
		// 停止游戏
		public function cleanUp() {
			
			// 停止所有的事件
			stage.removeEventListener(KeyboardEvent.KEY_DOWN,keyDownFunction);
			stage.removeEventListener(KeyboardEvent.KEY_UP,keyUpFunction);
			removeEventListener(Event.ENTER_FRAME,gameEvents);
			
			// 移除炮弹
			if (cannonball != null) {
				removeChild(cannonball);
				cannonball = null;
			}
			
			// 移除大炮
			removeChild(cannon);
			removeChild(cannonbase);
		}

		public function endLevel() {
			gotoAndStop("levelover");
		}
		
		public function endGame() {
			gotoAndStop("gameover");
		}
         //一个分布级别结束后,游戏停在leveover帧上,这一帧将玩家带到下一级别,并开始游戏
		public function clickNextLevel(e:MouseEvent) {
			gameLevel++;
			gotoAndStop("level"+gameLevel);
		}
		
		public function showGameScore() {
			showScore.text = String("Shots: "+shotsUsed);
		}
		
	}
}



时间轴脚本:

气球需要在自身的时间轴的最后一帧调用balloonDone。(爆炸后气球消失)

3个级别都需要调用startLevel函数:

startLevel();

同时,intro帧需要设置一个按钮用于开始游戏:

stop();
startButton.addEventListener(MouseEvent.CLICK,clickStart);
function clickStart(event:MouseEvent) {
 startBalloonPop();
}

同样的,leveover帧上需要设置自身的按钮,用来调用主类中的clickNextLevel函数:

nextLevelButton.addEventListener(MouseEvent.CLICK,clickNextLevel);
最后,gameover帧也需要为按钮添加脚本:

playAgainButton.addEventListener(MouseEvent.CLICK,playAgainClick);
function playAgainClick(e:MouseEvent) {
 gotoAndStop("intro");
}

Flash As3.0 游戏开发小结

转自: http://blog.csdn.net/chongtianfeiyu/article/details/8096446 ActionScript3.0(以下简称AS3.0)开发fla...
  • shangguanyingqi
  • shangguanyingqi
  • 2014年02月16日 21:15
  • 4801

ActionScript 3.0 学习(十二) AS3 模拟打地鼠小游戏

有问题请联系qq:1031885567,注明csdn加好友。          本节做了一个模拟打地鼠小游戏,可以学习其中将各个方格用统一的类来管理,同时需要注意的是在将子原件移除掉时,也相应需要将...
  • BoRenLiang
  • BoRenLiang
  • 2015年10月20日 09:08
  • 1864

使用AS3.0开发FC超级马里奥

前言:制作这个游戏完全是因为教手持设备开发的老师布置大作业,要求组队或者个人完成一个手持应用的开发。其实一开始我就后悔报这门选修课,我只玩C,不喜欢JAVA,结果教的偏偏是安卓应用开发,那你倒是取名叫...
  • qq_25852279
  • qq_25852279
  • 2016年05月19日 00:11
  • 1329

Flash打气球游戏AS3源码

  • 2011年10月31日 18:09
  • 39KB
  • 下载

flash as3 扎气球游戏

如图:   游戏玩法: 在这个游戏中,玩家用鼠标控制旋转的刀刃。气球从屏幕低端飘上来,玩家必须用刀刃去把所 有出现的气球戳破。随着游戏的运行,等级会持续提升,气球飘动的速度越来越快。如果玩...
  • MeetLunay
  • MeetLunay
  • 2012年08月17日 16:20
  • 2566

AS3.0实现扎气球游戏

需要准备的素材:一张剪刀图片PlayerImage,一张背景图片BackImage,还有一组气球图片EnemyImage(建议五个不同颜色的),一个音频文件Pop,将这些素材添加到库中,设置成影片剪辑...
  • zs19920928
  • zs19920928
  • 2015年01月13日 10:30
  • 192

flash as3.0 五子棋的游戏制作

主界面的截图 游戏玩法: 五子连珠这个游戏需要由两位选手一起来完成,其中一位是电脑,电脑在游戏中使用黑棋比赛,您在游戏中使用白棋进行比赛,游戏的目的是尽量将自己的棋在棋盘上排列成五颗棋子连在一...
  • SilenceDXY
  • SilenceDXY
  • 2016年11月16日 14:54
  • 939

flash AS3.0游戏

  • 2015年08月21日 21:27
  • 317KB
  • 下载

Flash as3.0制作的打字测试小游戏源码。

  • 2015年12月02日 14:12
  • 12KB
  • 下载

flash as3.0射击游戏

  • 2012年12月12日 19:58
  • 3.77MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:flash as3.0气球游戏
举报原因:
原因补充:

(最多只允许输入30个字)