記事一覧
第1回 設定とタイトル
第2回 メイン画面
第3回 ターゲットと敵と
第4回 スコア・時間など
第5回 ゲームを公開する
第6回 Twitterにスコアを投稿
第7回 サウンド関係
第8回 物理エンジンなど
はじめに
あほげー開催間近なので,どんどん追加します.
あとゲームに必要な要素といえば,音ですかね,ということで追加しました.
2018/7/12訂正:このバージョンでは,サウンドの設定をOFFにしても,1プレイ後タイトルに戻ったときにサウンドの設定がONに戻ってしまう不具合があります.最新バージョンで修正しました(ゲーム内容が変わっちゃってますけど).変更内容はこの記事の最後に説明しています.
音源の追加
まず,素材となる音を追加します.メニューから「ウィンドウ」→「音声リスト」を選び,音声ファイルを追加します.

対応している音声ファイルは,スクリーンショットに書いてある通りです.

それぞれの音声ファイルには $se_????
というグローバル変数が割り当てられます.
BGMを鳴らすプログラム
Mainクラスで,ゲームスタート,クリア,ゲームオーバーになったときに$sound.playBGM で音声をBGMとして再生します.第一引数に,さきほどの音声リストで追加したファイルに割り当てられた変数名$se_????
を指定します.第2引数はループ再生をするかどうかを指定します.
//中略
$sound.playBGM($se_bgm,true);//★ゲーム中に流れるBGM
while($state=="play") {
//中略
}
switch($state) {
case "gameover":
$sound.playBGM($se_death);//★ゲームオーバーになったときのBGM
new Label{text="ゲームオーバー",x=230,y=200,size=50};
$mesg=$theme+"を"+$score+"個集めたところで"+$subTheme+"に阻まれて無念のリタイア.";
break;
case "clear":
$sound.playBGM($se_fanfare);//★ゲームクリアしたときのBGM
$mesg=$time+"秒かけて"+$theme+"を見事"+$score+"個集めきった.";
new Label{text="クリア",x=230,y=200,size=50};
break;
}
効果音を鳴らすプログラム
Playerクラスでは,プレイヤーがターゲットをとったときに効果音を鳴らしています.$sound.playSEメソッドで鳴らします.後ろについている{rate=1+$score*0.1}
は, 再生速度を変化させるためのものです.rate=1 のときがもとのファイルと同じ速さです.ここでは,スコアが増えるにつれて速く再生させています.
pad=new APad;
p=$pat_ahoge26+0;
while(true) {
x+=pad.vx*5;
y+=pad.vy*5;
t=crashTo(Target);
if (t) {
//★ターゲットをとったときに効果音
$sound.playSE($se_coin) {rate=1+$score*0.1};
$score+=1;
t.die();
if ($score>=10) {
$state="clear";
break;
}
}
e=crashTo(Enemy);
if (e) {
$state="gameover";
die();
}
update();
}
サウンドのON/OFFの設定
音を鳴らしたくない場合は$sound.mute をtrue に設定します.タイトル画面で切り替えられるようにしています.
//前略
//Sound:ON または Sound:OFF を表示するラベル
sb=new Label{text="Sound:ON",y=360,x=150,size=30};
//切り替えボタン
new Button{
text="On↔Off",
left=250,
top=360,
width=180,
height=40,
onClick=toggleSound
};
$sound.mute=false;
//中略
\toggleSound () {
//サウンドがONならOFFに,OFFならONに
$sound.mute=!$sound.mute;
sb.text=$sound.mute ? "Sound:OFF": "Sound:ON";
$sound.playSE($se_coin);//ONのときは鳴る
}
2018/7/12訂正:最新バージョンでは,$sound.mute=false;
はSetting クラスに移動しました.また,toggleSoundメソッド内のsb.text=$sound.mute ? "Sound:OFF": "Sound:ON";
の行をボタンsb
生成直後にも実行するようにしています.
おまけ
効果音を作成できるサイトを作りました.使い方はまだ書いていませんが,サンプルを参考にしてください.
Last: 第8回 物理エンジンなど