gc.playSe(効果音番号)

2008年度ゲームプログラミング
ゲームプログラミング
第6回:音を鳴らそう!
(効果音とBGMの再生)
2008年度ゲームプログラミング
音ファイルの種類

wavファイル=音の波形データが入っている
 midiファイル=楽譜データ
(音色、音程、鳴らすタイミング)が入っている

携帯では主にmidiを変換したファイルを使う。
docomo→mldファイル
au→pmd,mmfファイル(機種によって異なる
)
vodafone→spf,mmfファイル
2008年度ゲームプログラミング
gameCanvasでの音の扱い

gameCanvasでは、音を二つに分けて扱っ
ている。
– 効果音
• 一度しかならない
• 同時に多数の効果音が鳴りえる
– BGM
• ループで鳴り続ける
• 排他的で、BGM 0とBGM 1が同時になることはな
い
– *実は効果音をループで鳴らしたり、BGMを複数鳴らすこ
とは出来ます。ただ、ややこしいので説明を省きます
2008年度ゲームプログラミング
効果音を鳴らす準備
効果音データの準備
サンプルデータのsnd0.mldをresフォルダへ。
 ファイル読み込み
gameCanvasがsndX.mldをXが0から順に読
み込んでいく。sndX.mldはgameCanvasでは
効果音として読み込まれる。BGMとして読み込
みたい場合は、後ほど紹介

2008年度ゲームプログラミング
ボールが跳ね返った時に鳴らす

跳ね返り処理のところで、
gc.playSe(効果音番号);
を呼ぶと、効果音が1回だけ鳴る。
効果音番号は、0を入れるとsnd0.mldについて
の操作になる。
 効果音を止めたい時は
gc.stopSe();

2008年度ゲームプログラミング
複数の効果音を鳴らす
音番号を0にするとsnd0.mldが再生される。
snd1.mldやsnd2.mldを鳴らしたいときは
resフォルダにファイルを入れれば使える。
ただし途中で番号が途切れないように…
 gc.playSe(1);
→snd1.mldを再生

2008年度ゲームプログラミング
BGMの準備(1)
 まずは、マシン内を検索してmidiファイ
ルを探そう(「*.MID」で検索)
 なかったらインターネットから拾ってこよ
う
 ツールを使ってmidiデータをmldに変換
。
2008年度ゲームプログラミング
BGMの準備(2)
効果音は sndX.mldだったが、BGMは
bgmX.mldを読み込む
 なので変換したmldをbgmX.mld(Xは数値)
に改名
 あとはgameCanvasが bgm0.mldから順番
にBGMとして読み込んでくれる。

2008年度ゲームプログラミング
BGMを再生してみよう。
効果音の時はplaySeでしたが、BGMの時は命
令が変わります。
gc.playBgm(BGM番号);
 ボリューム調節もできる。
gc.changeBgmVolume(音量);
音量は、0~100の間で指定


実は効果音も同様にボリューム調整できる
gc.changeSeVolume(音量);
2008年度ゲームプログラミング
ゲームのBGMを流す

initGameの中で
・BGMを再生する命令
とすると、ゲームを開始する度に曲の最初か
ら再生する。
2008年度ゲームプログラミング
初回起動時にinitGameを呼ぶ

コンストラクタを抜け出た後で音データが読み
込まれるので、コンストラクタ内での再生命令
は無視される。
→最初のupdateGameで初期化されるように
変更
int gameState = -1; //未初期化
updateGame内で
if(gameState== -1 ){
initGame();//未初期化だったら初期化
}
2008年度ゲームプログラミング
ボールを20回受けたらクリアー
ボールを受けた回数を保存する変数が必要
int p;
 跳ね返り処理のところで、回数を1増やす
p++;
 回数が20以上になったらgameStateを2にす
る。
→ゲーム中断
if(pが20以上だったら){ gameStateを2に;}

2008年度ゲームプログラミング
クリアー時の効果音と画面表示

gameStateを2にした時に、効果音を鳴らす
命令を呼ぶ。(gc.playSe)

drawGame()の中でgameStateに応じて
メッセージを表示
if(gameState==1)ゲームオーバーと表示
if(gameState==2)ゲームクリアーと表示
2008年度ゲームプログラミング
跳ね返り方を変える(1)
常に跳ね返り方が一定
→ひたすら受身なゲーム
 ボールの跳ね返り方を変える
→プレイヤーがボールを操作できる
→戦略的に遊べる


ボールをキャッチする機能などでも、
プレイヤーによるボール操作は可能
2008年度ゲームプログラミング
跳ね返り方を変える(2)

動いているかどうかの判断は操作方法に
よって異なる
bardxを使用
→bardxが0でなかったら
bardxを使っていない
→当たった瞬間にキーが押されていたら
→キーの状態を保存する機能が必要
2008年度ゲームプログラミング
跳ね返り方を変える(3)
処理の流れ
if(バーをボールで跳ね返す条件){
dy=-dy; // 通常の跳ね返り処理
if(バーが右に動いている)dx++;
if(バーが左に動いている)dx--;
}
 ゲームが簡単になり過ぎないよう、調整が必
要(上の壁ではランダムで跳ね返る、等)
