首页 > ActionScript 3 > flash as3制作小球碰撞游戏(下)

flash as3制作小球碰撞游戏(下)

第4步计算小球测试碰撞位置

修改这里代码如下
if(ball_mc.hitTestObject(paddle_mc))
{
yDirection *= -1;
ball_mc.y = paddle_mc.y - ball_mc.height - paddle_mc.height/2;
checkHitLocation(paddle_mc);//增加的
}

计算事件 根据小球位置不同碰撞就改变速度,比如左边碰撞后加速
function checkHitLocation(paddle:MovieClip):void
{
var hitPercent:Number;//定义百分比
var ballPosition:Number = ball_mc.x - paddle.x;//小球位置
//小球位置/(铁棒长度-小球长度)-0.5
hitPercent = (ballPosition / (paddle.width - ball_mc.width)) - .5; //计算百分比
xDirection = hitPercent * 30;
yDirection *= 1.05;
}

第5步增加AI敌人
在initializeGame里增加敌人事件如下:

enemy_mc.addEventListener(Event.ENTER_FRAME, moveEnemy);

具体moveEnemy事件如下:
function moveEnemy(event:Event):void
{
var enemyTargetX:Number;
enemyTargetX = ball_mc.x - enemy_mc.width/2;

if(enemyTargetX <= 0)
{
enemyTargetX = 0;
}
else if(enemyTargetX >= stage.stageWidth - enemy_mc.width)
{
enemyTargetX = stage.stageWidth - enemy_mc.width;
}

enemy_mc.x += (enemyTargetX - enemy_mc.x) / easing;
}

然后也要设置跟小球碰撞测试

再moveBall增加如下代码

if(ball_mc.hitTestObject(enemy_mc))
{
yDirection *= -1;
ball_mc.y = enemy_mc.y + enemy_mc.height + ball_mc.height/2;//小球y坐标
checkHitLocation(enemy_mc);
}
改动下面代码
if(ball_mc.y <= 0)
{

resetBallPosition();//如果小球出界重置位置
}

第6步,计算敌我双方分数

定义2个变量
var playerScore:Number;
var enemyScore:Number;

在 initializeGame初始化下上面变量

playerScore = 0;
enemyScore = 0;

改变moveBall里的代码如下

if(ball_mc.y <= 0)
{
playerScore ++; //得分
showScore();//调用显示分数代码
resetBallPosition();
}
else if(ball_mc.y >= stage.stageHeight - ball_mc.height)
{
enemyScore ++;//失分
showScore();//调用显示分数代码
resetBallPosition();
}

//调用显示分数代码

function showScore():void
{
//元件score_mc里面的影片剪辑slide_mc上的文本player_txt值
score_mc.slide_mc.player_txt.text = "Player: " + playerScore;
score_mc.slide_mc.enemy_txt.text = "Enemy: " + enemyScore;
score_mc.gotoAndPlay(2);//跳到第2帧
}
元件score_mc里面的影片剪辑slide_mc上的文本player_txt值

第7步设置谁赢谁输
设置赢的条件
var winningScore:Number = 3;

然后改变showScore()函数如下

function showScore():void
{
//大于影的条件为赢
if(playerScore >= winningScore)
{
score_mc.slide_mc.player_txt.text = "Player Wins!";
score_mc.slide_mc.enemy_txt.text = "Click to play again";
endGame();//调用结束函数
}
else if(enemyScore >= winningScore)
{
score_mc.slide_mc.enemy_txt.text = "Enemy Wins!";
score_mc.slide_mc.player_txt.text = "Click to play again";
endGame();
}
else
{
score_mc.slide_mc.player_txt.text = "Player: " + playerScore;
score_mc.slide_mc.enemy_txt.text = "Enemy: " + enemyScore;
score_mc.gotoAndPlay(2);//跳到2帧
}

//调用结束函数
function endGame():void
{
//移除事件
paddle_mc.removeEventListener(Event.ENTER_FRAME, movePaddle);
enemy_mc.removeEventListener(Event.ENTER_FRAME, moveEnemy);
ball_mc.removeEventListener(Event.ENTER_FRAME, moveBall);
bg_mc.addEventListener(MouseEvent.CLICK, initializeGame);//增加点击背景开始游戏事件

Mouse.show();//显示鼠标

score_mc.gotoAndStop(12);//跳到12帧,相应的也要改变initializeGame里score_mc.gotoAndStop(1);
}
}

改变initializeGame函数
增加
score_mc.gotoAndStop(1);

第8步最后一步给游戏增加声音
打开库文件点击声音类型hit.wav,右键属性-》链接 类名Hit确定

然后重新定义一个声音 var hit:Sound = new Hit();

然后在moveBall函数里调用,用hit.play();

比如此处等等,还有重置函数resetBallPosition不要忘了
if(ball_mc.x <= 0)
{
xDirection *= -1;
hit.play();
}

本程序最初文件和最终源码下载
本文通过听一个英文视频教程后把开发步骤用中文记录下,并自己加点注释

原创文章转载请注明出处:云飞扬IT的blog

本文链接: http://www.ajaxcn.net/archives/335

分类: ActionScript 3 标签:
一键分享到:新浪微博分享  分享到网易微博    转贴到开心网  推荐到豆瓣  分享到QQ空间    RSS订阅
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.