PR
 この記事は,日経ソフトウエア2006年9月号特集1「ゲーム・プログラミング徹底攻略」初級講座 「Flashでゼロから『ブロック崩し』を作る! 」を再録したものです。現在のFlashの最新バージョンは「Flash CS3」であり,画面などに若干の差異があります。また,Flash CS3が備えるActionScriptは「ActionScript3.0」で,Flash 8が備える「ActionScript2.0」とは仕様が少し異なります。ただし,Flash CS3でもActinScript2.0を使うことができます。ActionScript3.0と2.0の違いや,Flash CS3でActionScript2.0を使う方法については「Flashは新バージョン『CS3』でここが変わった(後編:ActionScript3.0編)」をご覧ください。30日間限定ですべての機能を無償で利用できるFlash CS3体験版をこちらからダウンロードできます

Step9 ボールの動きに変化を加える

 ここまでの出来では,ボールの速度や移動方向がほぼ固定のため,ゲーム自体が単調に感じてしまいます。そこで,ボールの向きや速度に変化をつけましょう。ボールのスクリプトで,バーとの衝突判定を行う処理部分をリスト7のように変更します。

 こうすることで,バーの位置によってボールの反射角度が変化するほか,バーに当たるたびにボールの速度が5%ずつ上昇します。ただし,ボールの速度が上がりすぎるとブロックにくい込んで見えてしまうため,最大速度を制限する必要があります。ここでは速度が5より大きくなった場合,もしくは-5未満になった場合に,値を修正して速度が上昇しないようにしています。

//バーとの衝突判定
if(hitTest(_root.bar00)){
 _y=_root.bar00._y-25;
 tmpX = (_x-_root.bar00._x)/20;
 tmpY = -tmpY*1.05;
 if (tmpY>5) {
   tmpY = 10;
 }
 if(tmpY<-5){
   tmpY = -5;
 }
}
リスト7●バーとの衝突判定を行う処理部分を修正し,バーの位置によってボールの速度や移動方向を変えるようにする

 また,ボールがブロックのどの部分に当たったかによっても,ボールの反射角度を変えるといいでしょう。ブロックとの衝突判定部分をリスト8のように変えることで,ボールがブロックの側面に当たった場合にX軸方向の向きを反転させています。ここで注意してほしいのは,インスタンスを消す前に側面の衝突判定を行う点です。removeMovieClipメソッド実行後では,参照すべきインスタンスが存在しないので,正常に動作しません。

//ブロックとの衝突判定
for(i=0; i<48; i++){
 if(hitTest(eval("_root.block"+i))){
  if((_x-10)>eval("_root.block"+i)._x+35 ||
    (_x+10)<eval("_root.block"+i)._x-35) {
    tmpX = -tmpX;
  }
  eval("_root.block"+i).removeMovieClip();
  tmpY = -tmpY*1.01;
  }
}

リスト8●ブロックとの衝突判定にも手を加え,ブロックの側面に当たった場合にX軸方向の向きを反転する

Step10 効果音を加える

 ゲームは,プレイ中のサウンドが重要な役割を果たします。全くの無音状態では,盛り上がりに欠けるでしょう。ボールがブロックやバーに当たった際に,効果音が再生されるようにしましょう。まずは,効果音用のWAVファイルを用意してください。適当な音声素材がない場合は,フリーソフトを利用して作るのもいいでしょう。筆者はShou氏制作の「Kanawave」(http://homepage1.nifty.com/sakurayama/)を利用して作成しました。図17のように設定することで,反射音っぽいWAVファイルを作れます*6

図17●交換音作成フリーソフト「Kanawave」で,反射音の“ぴん”という音を作っているところ
図17●交換音作成フリーソフト「Kanawave」で,反射音の“ぴん”という音を作っているところ

 効果音用のWAVファイルを用意したら,[ファイル]メニューから[読み込み]→[ライブラリに読み込み]を選び,用意したWAVファイルを指定します。ライブラリ・パネルに項目が追加されたら,それを右クリックして「リンケージ」を選び,リンケージ・プロパティを表示します。「ActionScriptに書き出し」のチェックをオンにして,識別子に任意の名前(ここではSE)を設定しましょう(図18)。

図18●ライブラリに登録したサウンド・ファイルは,リンケージ・プロパティで識別子を与え,ActionScriptで操作可能にする
図18●ライブラリに登録したサウンド・ファイルは,リンケージ・プロパティで識別子を与え,ActionScriptで操作可能にする

 続いてActionScriptで,サウンドを制御するSoundクラスを使って新しいオブジェクトを作成します。ボールのonClipEvent(load)ハンドラに,以下のスクリプトを加えてください。

var se01.Sound = new Sound();
se01.attachSound("SE");

1行目は,「se01」というSoundクラスのインスタンスを作成します。このインスタンスに対して,2行目のattachSoundメソッドで,Soundオブジェクトにリンケージされたサウンド・ファイルを割り当てます。引数にはサウンド・ファイルの識別子を指定してください。

 このあとは,効果音を再生したい個所に「se01.start();」と記述すればOKです。サンプルでは,ボールがバーまたはブロックに衝突した際に(衝突判定のなかで)再生しています。

 サウンドを再生する場合はstartメソッドを,再生を停止する場合はstopメソッドを使います。複数の効果音を再生する場合は,Soundオブジェクトも複数必要になります。なお,FlashはMP3形式やAIFF形式のサウンド・ファイルにも対応しています。