▽効果音、BGMを鳴らそう▽
カーソル上キーで効果音を、
カーソル下キーでBGMを鳴らすFlashを作ります。

今回もGameEngineフォルダのプロジェクトを使って、一からプログラムします。

ActionScript簡易ゲームライブラリ(以下、ゲームライブラリ)を
ダウンロードしていない場合はActionScript簡易ゲームライブラリのダウンロードと実行をしようを参考に準備をしてください。

素材として効果音とBGM用にmp3ファイルを
GameEngineフォルダのbin/resourceフォルダにコピーしてください。
私はPANICPUMPKIN様の素材を利用させていただいています。

今回はBGM用mp3ファイルを「bgm.mp3」、
効果用mp3ファイルを「test.mp3」としています。


準備できましたか?
では、FlashDevelopを実行して
GameEngineフォルダの「GameEngine.as3proj」を開いてください。

srcフォルダの「GameMain.as」が実際に開発するファイルです。


1.mp3ファイルの相対パスを定数にします。
/**
 * ゲームのエントリクラス
 * こちらのクラスに修正を加えて、ゲームを作ってください。
 */
public class GameMain extends GameLib
{
 //ゲームライブラリ群
 private var _sound:GameLib.SoundClass = null;
 private var _bgm:GameLib.BgmClass = null;
 private var _graphic:GameLib.GraphicClass = null;
 private var _key:GameLib.KeyClass = null;
 
 
 //mp3ファイル用定数
 private static const SOUND_TEST:String = "resource/test.mp3";
 private static const BGM_TEST:String = "resource/bgm.mp3";



2.キー入力監視用プライベート変数を追加します。
 //mp3ファイル用定数
 private static const SOUND_TEST:String = "resource/test.mp3";
 private static const BGM_TEST:String = "resource/bgm.mp3";


 //キー入力監視用変数
 private var _pushUp:Boolean = false;
 private var _pushDown:Boolean = false;



3.initメソッドにコードを追加します。
ここでは、大きく2つのコードを追加します。

・mp3ファイルのロード処理
・キー入力クラスのキー登録

/**
 * 初期化処理
 * ゲームループ前に一度だけ実行されます。
 * 必要な修正を入れてください。
 */
protected override function init():void
{
 //リソース生成
 this._sound = new GameLib.SoundClass();
 this._bgm = new GameLib.BgmClass();
 this._graphic = new GameLib.GraphicClass(this._refStage);
 this._key = new GameLib.KeyClass(this._refStage);
 
 //ここから下に修正をいれてください。

 //mp3ファイルの読み込み
 this._sound.load(SOUND_TEST);
 this._bgm.load(BGM_TEST);

 //キーボードのキーコード登録
 this._key.addKeyCode(Keyboard.UP);
 this._key.addKeyCode(Keyboard.DOWN);

}


4.runメソッドにコードを追加します。

今回は以下の2つを追加します。
・キー入力クラスでキー入力状況を取得し、
 カーソルキーが押されている場合は効果音やBGMを鳴らす。
・画面への描画

/**
 * ループ処理
 * 必要な修正を入れてください。
 */
public override function run():void
{
 this._graphic.clear();

 //ここから下に修正をいれてください。

 //カーソル上キーを押すと効果音を鳴らす
 if (this._key.getKeyState(Keyboard.UP)) {
  if (this._pushUp == false) {
   //押した瞬間のみ効果音を鳴らす
   this._sound.play(SOUND_TEST);
  }
  this._pushUp = true;
 }else {
  this._pushUp = false;
 }
 
 //カーソル下キーを押すとBGMを鳴らす
 if (this._key.getKeyState(Keyboard.DOWN)) {
  if (this._pushDown == false) {
   //押した瞬間のみBGMをON/OFFする
   if (this._bgm.isPlay) {
    this._bgm.stop();
   }else {
    this._bgm.play();
   }
  }
  this._pushDown = true;
 }else {
  this._pushDown = false;
 }

 //Text出力
 this._graphic.drawText(0, 0, "↑ 効果音を鳴らす");
 var bgmText:String = "↓ BGM ";
 if (this._bgm.isPlay) {
  bgmText += "再生中 \n[もう一回押すと停止します]";
 }else {
  bgmText += "停止中 \n[もう一回押すと再生します]";
 }
 this._graphic.drawText(0, 100, bgmText);

 //ここから上に修正をいれてください。

 this._graphic.flip();
}
キーが押され続けているかどうか、監視するために監視用private変数を用意しています。
これを行わないとキーがずっと押されている場合、効果音が連続で再生され続けてしまいます。
キー入力管理は以下の処理を行っています。
・キーが入力されていれば以下を実行
 ・監視用変数がfalse(押していない)であれば、mp3を再生
 監視用変数にtrue(押した)を格納
・キーが押されていなければ以下を実行
 監視用変数にfalse(押していない)を格納

また、BGMが再生中かどうかは
BgmClassのisPlayプロパティ(ソース上の「this._bgm.isPlay」)
で確認することが出来ます。
ソース上ではこのプロパティを使って、BGMを再生している場合は停止、
停止している場合は再生と切り替えを行っています。


プログラムが終わりました。
実行ボタンを押してください。

カーソルキーで効果音やBGMが再生されましたか?


▽改変履歴▽
2011/08/08
・新規作成