AS3.0实现扎气球游戏

需要准备的素材:一张剪刀图片PlayerImage,一张背景图片BackImage,还有一组气球图片EnemyImage(建议五个不同颜色的),一个音频文件Pop,将这些素材添加到库中,设置成影片剪辑,且需要修改属性。

.


注意,EnemyImage影片剪辑里面有五个关键帧,分别对应五个不同颜色的气球。



注意:

balloons.fla文件和Games文件需要在同一文件夹下面。需修改balloons.fla的文档类


源码:

package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.*;
import flash.events.*;
import flash.geom.Rectangle;
import flash.media.Sound;
import flash.text.*;

public class Games 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;//设置平行线

public function Games(){
addEventListener(Event.ENTER_FRAME,gameLoop);//添加事件监听
bg = new BackImage();//定义背景色
addChild(bg);//添加到舞台
scoreLabel.text = "Score:";//分数标题内容
levelLabel.text = "Level:";//等级标题内容
chancesLabel.text = "Chances:";//遗漏内容
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(scoreText);//添加到舞台
addChild(levelLabel);//添加到舞台
addChild(levelText);//添加到舞台
addChild(chancesLabel);//添加到舞台
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{
score = 0;
chances = 0;
player = new PlayerImage();
enemies = new Array();
level = 1;
levelText.text = level.toString();
addChild(player);
player.startDrag(true,new Rectangle(0,0,550,400));
gameState = STATE_PLAY;
}

//开始游戏
public function playGame():void{
player.rotation +=15;
makeEnemies();
moveEnemies();
testCollosions();
testForEnd();
}

//生成气球
public function makeEnemies():void{
var chance:Number = Math.floor(Math.random()*100);
//trace(chance);
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 testCollosions():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();
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值