flash as3.0气球游戏
我们需要一个大炮和一个底座,大炮可以旋转,而底座固定不动。通过键盘控制射击五颜六色的气球,击中气球显示爆炸的效果,气球消失。 时间轴上共三帧,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(); 同样的,leveover帧上需要设置自身的按钮,用来调用主类中的clickNextLevel函数: nextLevelButton.addEventListener(MouseEvent.CLICK,clickNextLevel); playAgainButton.addEventListener(MouseEvent.CLICK,playAgainClick); function playAgainClick(e:MouseEvent) { ?gotoAndStop("intro"); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |