自機と障害物の当たり判定を行います。
Flash では当たり判定を行うのに、とても簡単な方法があります。
詳しくは [ 1ドット当たり判定 ] を参照して下さい。
当たり判定を追加したプログラムは次のようになります。
var flg1 = 0;
var flg2 = 0;
var flg3 = 0;
var flg4 = 0;
var hitflg = 0;
// 毎フレーム実行されるイベントを登録
stage.addEventListener(Event.ENTER_FRAME, mainloop);
function mainloop(event:Event):void {
hitflg = 0; // 0:外れ 1:当り
if( ball_mc.hitTestPoint(player_mc.x, player_mc.y, true) ){
hitflg = 1;
}
if( ball2_mc.hitTestPoint(player_mc.x, player_mc.y, true) ){
hitflg = 1;
}
if( ball3_mc.hitTestPoint(player_mc.x, player_mc.y, true) ){
hitflg = 1;
}
if( ball4_mc.hitTestPoint(player_mc.x, player_mc.y, true) ){
hitflg = 1;
}
if( hitflg == 1 ){
player_mc.rotation += 15; // 自機を回転する
} else {
player_mc.rotation = 0;
}
// マウスx座標を取得して自機を動かす
player_mc.x = stage.mouseX;
player_mc.y = 320;
// 障害物の初期処理
var rnd:int = 0;
if( flg1 == 0 ){
flg1 = 1;
rnd = Math.random() * 400;
ball_mc.y = -100 - rnd; // 初期y座標
}
if( flg2 == 0 ){
flg2 = 1;
rnd = Math.random() * 400;
ball2_mc.y = -100 - rnd;
}
if( flg3 == 0 ){
flg3 = 1;
rnd = Math.random() * 400;
ball3_mc.y = -100 - rnd;
}
if( flg4 == 0 ){
flg4 = 1;
rnd = Math.random() * 400;
ball4_mc.y = -100 - rnd;
}
// 障害物の移動
ball_mc.y += 5; // 下に移動
if( ball_mc.y > 500 ){ // 画面外へ出た
flg1 = 0;
}
ball2_mc.y += 5;
if( ball2_mc.y > 500 ){
flg2 = 0;
}
ball3_mc.y += 5;
if( ball3_mc.y > 500 ){
flg3 = 0;
}
ball4_mc.y += 5;
if( ball4_mc.y > 500 ){
flg4 = 0;
}
}
ムービープレビューしてみましょう。
自機が障害物に重なると、くるくると回転するようになりました。
新しく追加された部分を見てみましょう。

A では、当たったかどうかを記録する変数を用意しています。
B では、初期化をしています。これが無いと、1度当たるとずっと当たっている状態に
なってしまいます。
C のところで当たり判定を行っています。
障害物1つずつと自機との判定を行っているので、4つあります。

障害物のインスタンス名と自機の座標で、当たり判定を行います。
hitflg は当たり(1) 外れ(0) の情報を格納します。
この情報を元に、当っている時はやられ演出を行います。
D で、やられ演出として自機の回転を行います。
player_mc.rotation += 15;
これは「自機を15度ずつ角度を付ける」という処理です。
この処理が数フレーム続けて行われると回転しているように見えます。
今回使っている当り判定の方法は
1ドットの座標と対象となるものとの関係をチェックしてます。
指定した座標に対象物が存在する時「当っている」と判断します。
この方法のメリットは取り扱いが簡単であること
デメリットは、実際の見た目と当り判定に違いがあることです。

見た目と当たりとの誤差があるため、ゲームの内容によっては注意が必要です。
正確な当たり判定を必要とするタイプのゲームには向きません。
今回は
自機の当り判定の範囲が小さい = プレイヤーに有利
および
当たり判定の正確性はあまり重要ではない
ということで、この方法でも許されると思います。
注意するパターンとして、敵の当たりを1ドットで判定するようなゲームを作ると
当たりが小さくて、プレイヤーが撃った弾がなかなか当らない
という状況が発生します。プレイヤーはすごいストレスを感じることになるでしょう。
対象物の性質に合わせて判定方法を使い分ける必要があります。
当たり判定をする時に注意することがあります。
それは当り判定を行うタイミングです。
今回のプログラムの概要は次のようになっています。

注目する点は、当り判定の場所です。
自機や障害物の移動処理の前にあります。
移動処理では、次フレームに表示する場所を計算しています。
移動処理後に当り判定をもってくると、移動先の位置で判定することになるので
実際の見た目で接触していないのに、「当たり」と判定される可能性があるのです。

今回のような大雑把なゲーム内容では、あまり気にする必要もないのですが
今後ゲームを作成していく上で、このポイントは重要になってきます。
移動処理と当り判定の場所は、意識しながら作るようにしましょう。
(移動先で当り判定をする場合もあります 例:玉が壁で跳ね返る処理など)
次[ 当たり判定からゲームオーバーへ ]へ進む