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





