flash as3 扎气球游戏
发布时间:2020-12-15 07:14:59 所属栏目:百科 来源:网络整理
导读:如图: ? 游戏玩法: 在这个游戏中,玩家用鼠标控制旋转的刀刃。气球从屏幕低端飘上来,玩家必须用刀刃去把所 有出现的气球戳破。随着游戏的运行,等级会持续提升,气球飘动的速度越来越快。如果玩家漏掉了五 个气球,游戏就结束了。由于没有设立一个重置方
如图: ? 游戏玩法: 在这个游戏中,玩家用鼠标控制旋转的刀刃。气球从屏幕低端飘上来,玩家必须用刀刃去把所 附代码和分解: package { import flash.display.MovieClip; import flash.events.Event; import flash.events.MouseEvent; import flash.display.*; import flash.events.*; import flash.geom.Rectangle; // new import flash.media.Sound; //new import flash.text.*; //new public class Game extends flash.display.MovieClip{ public static const STATE_INIT:int = 10; public static const STATE_PLAY:int = 20; public static const STATE_END_GAME:int = 30; public var gameState:int = 0;//游戏状态 public var score:int = 0; //得分 public var chances:int = 0; //漏掉了几个气球 public var bg:MovieClip; //游戏的背景图 public var enemies:Array; //储存敌人(气球) public var player:MovieClip; //引用玩家的图片 public var level:Number = 0; //等级 //文本 public var scoreLabel:TextField = new TextField(); public var levelLabel:TextField = new TextField(); public var chancesLabel:TextField = new TextField(); public var scoreText:TextField = new TextField(); public var levelText:TextField = new TextField(); public var chancesText:TextField = new TextField(); public const SCOREBOARD_Y:Number =380;//给计分板固定的Y坐标,使分数保持在最下端,舞台的高是400,在这改坐标设为380 public function Game() { addEventListener(Event.ENTER_FRAME,gameLoop); bg = new BackImage(); addChild(bg); //将背景添加到舞台上 scoreLabel.text = "Score:"; levelLabel.text = "Level:"; chancesLabel.text ="Misses:" scoreText.text ="0"; levelText.text ="1"; chancesText.text ="0"; scoreLabel.y = SCOREBOARD_Y; levelLabel.y = SCOREBOARD_Y; chancesLabel.y = SCOREBOARD_Y; scoreText.y = SCOREBOARD_Y; levelText.y = SCOREBOARD_Y; chancesText.y = SCOREBOARD_Y; scoreLabel.x = 5; scoreText.x = 50; chancesLabel.x = 105; chancesText.x = 155; levelLabel.x = 205; levelText.x = 260; addChild(scoreLabel); addChild(levelLabel); addChild(chancesLabel); addChild(scoreText); addChild(levelText); addChild(chancesText); gameState = STATE_INIT; } public function gameLoop(e:Event):void { switch(gameState) { case STATE_INIT : initGame(); break case STATE_PLAY: playGame(); break; case STATE_END_GAME: endGame(); break; } } //开始游戏时所有的初始值 public function initGame():void { //stage.addEventListener(MouseEvent.CLICK,onMouseClickEvent); removed score = 0; //chnaged from clicks to score chances = 0; //new player = new PlayerImage(); // new enemies = new Array(); //new level = 1; // new levelText.text = level.toString(); addChild(player);//new player.startDrag(true,new flash.geom.Rectangle(0,550,400)); //鼠标拖动元件通过这个实现 第一个参数为true 表示锁定在中央 ,第二个参数表示可以拖动的范围 gameState = STATE_PLAY; } public function playGame():void { player.rotation+=15;//玩家控制元件每次旋转15度 makeEnemies(); //让敌人出现 moveEnemies(); //更新气球的Y坐标,以及气球飘出屏幕的时候移除气球 testCollisions(); //检测玩家和敌人是否碰撞了 testForEnd(); //查看等级是否增加了,或是游戏是不是该结束了 } //气球出现的频率和等级相关 public function makeEnemies():void { var chance:Number = Math.floor(Math.random() *100);//获取0--99的随机数 var tempEnemy:MovieClip; if (chance < 2 + level) { tempEnemy = new EnemyImage() tempEnemy.speed = 3 + level; //通过动态变量设置速度,随等级的增加速度越来越快 tempEnemy.gotoAndStop(Math.floor(Math.random()*5)+1); tempEnemy.y = 435; //表示从低端开始移动 tempEnemy.x = Math.floor(Math.random()*515) addChild(tempEnemy); enemies.push(tempEnemy); //添加到敌人数组 } } // 更新每个气球的坐标 public function moveEnemies():void { var tempEnemy:MovieClip; for (var i:int = enemies.length-1;i>=0;i--) { tempEnemy = enemies[i]; tempEnemy.y-=tempEnemy.speed; if (tempEnemy.y < -35) { chances++; chancesText.text = chances.toString(); enemies.splice(i,1); removeChild(tempEnemy); } } } //检查碰撞 public function testCollisions():void { var sound:Sound = new Pop(); var tempEnemy:MovieClip; for (var i:int =enemies.length-1;i>=0;i--) { tempEnemy = enemies[i]; if (tempEnemy.hitTestObject(player)) { score++; //分数加 scoreText.text = score.toString(); sound.play(); //气球破了播放声音 enemies.splice(i,1); //从数组中移除这个气球 removeChild(tempEnemy); } } } //调用并检测当前等级和几乎的剩余 public function testForEnd():void { if (chances>= 5) { gameState = STATE_END_GAME; } else if(score > level*20) { level ++; levelText.text = level.toString(); } } //移除屏幕上所有敌人 public function endGame():void { for(var i:int = 0; i< enemies.length; i++) { removeChild(enemies[i]); enemies =[]; } player.stopDrag(); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |