と gc.setSoundNum(音数)

2007年度ゲームプログラミング
ゲームプログラミング
第6回:音を鳴らそう!
(効果音とBGMの再生)
2007年度ゲームプログラミング
音ファイルの種類

wavファイル=音の波形データが入っている
 midiファイル=楽譜データ
(音色、音程、鳴らすタイミング)が入っている

携帯では主にmidiを変換したファイルを使う。
docomo→mldファイル
au→pmd,mmfファイル(機種によって異な
る)
vodafone→spf,mmfファイル
2007年度ゲームプログラミング
音を鳴らす準備


音データの準備
サンプルデータのsnd0.mldをresフォルダへ。
ファイル読み込み
コンストラクタ(game()内)の画像数を指定
しているあたりで音数、同時再生数を指定
gc.setApNum(1);
gc.setSoundNum(1);
//音を1音(snd0.mld)使用
2007年度ゲームプログラミング
ボールが跳ね返った時に鳴らす

跳ね返り処理のところで、
gc.setSound(音番号, gc.SOUND_PLAY,
gc.PLAY_ONESHOT);
を呼ぶと、音が1回だけ鳴る。

音番号は、0を入れるとsnd0.mldについての操
作になる。
音を止めたい時は
gc.setSound(音番号,gc.SOUND_STOP,0);

2007年度ゲームプログラミング
複数の音を鳴らす


音番号を0にするとsnd0.mldが再生される。
snd1.mldやsnd2.mldを鳴らしたいときは
resフォルダにファイルを入れて、
コンストラクタで
gc.setApNum(同時再生音数)と
gc.setSoundNum(音数);
を呼ぶと使えるようになる。
gc.setSound(1,gc.SOUND_PLAY, ・・・);
→snd1.mldを再生
2007年度ゲームプログラミング
BGMの準備(1)
 まずは、マシン内を検索してmidiファイ
ルを探そう(「*.MID」で検索)
 なかったらインターネットから拾ってこよ
う
 ツールを使ってmidiデータをmldに変換。
2007年度ゲームプログラミング
BGMの準備(2)

snd?.mld(?は数値)に改名

コンストラクタで読み込む音数、同時再生音
数を増やす
gc.setApNum(2); //←同時再生音数
gc.setSoundNum(2);
→snd0.mldとsnd1.mldを自動的に読み込
んでくれる。
※最大4音までは普通に再生可能だが、
5音以上の再生はプログラムの追加が必要
2007年度ゲームプログラミング
BGMを再生してみよう。

再生時に最後の引数をgc.PLAY_LOOPにすると、
曲のファイルを無限に繰り返し再生する。
gc.setSound(鳴らしたい音番号、
gc.SOUND_PLAY,gc.PLAY_LOOP);

ボリューム調節もできる。
gc.setSound(音番号,gc.SOUND_VOL,音量);
音量は、無小中大の4種類
(gc.VOL_NONE,MIN,MID,MAX)
2007年度ゲームプログラミング
ゲームのBGMを流す

initGameの中で
・音を停止する命令
・音をループ再生する命令
とすると、ゲームを開始する度に曲の最初か
ら再生する。

音の停止
gc.setSound(停止したい音の番号,
gc.SOUND_STOP,0);
2007年度ゲームプログラミング
初回起動時にinitGameを呼ぶ

コンストラクタを抜け出た後で音データが読み
込まれるので、コンストラクタ内での再生命令
は無視される。
→最初のupdateGameで初期化されるように
変更
int gameState = -1; //未初期化
updateGame内で
if(gameState== -1 ){
initGame();//未初期化だったら初期化
}
2007年度ゲームプログラミング
ボールを20回受けたらクリアー
ボールを受けた回数を保存する変数が必要
int p;
 跳ね返り処理のところで、回数を1増やす
p++;
 回数が20以上になったらgameStateを2にす
る。
→ゲーム中断
if(pが20以上だったら){ gameStateを2に;}

2007年度ゲームプログラミング
クリアー時の効果音と画面表示

gameStateを2にした時に、効果音を鳴らす
命令を呼ぶ。(gc.setSound)

drawGame()の中でgameStateに応じて
メッセージを表示
if(gameState==1)ゲームオーバーと表示
if(gameState==2)ゲームクリアーと表示
2007年度ゲームプログラミング
跳ね返り方を変える(1)



常に跳ね返り方が一定
→ひたすら受身なゲーム
ボールの跳ね返り方を変える
→プレイヤーがボールを操作できる
→戦略的に遊べる
ボールをキャッチする機能などでも、
プレイヤーによるボール操作は可能
2007年度ゲームプログラミング
跳ね返り方を変える(2)

動いているかどうかの判断は操作方法に
よって異なる
bardxを使用
→bardxが0でなかったら
bardxを使っていない
→当たった瞬間にキーが押されていたら
→キーの状態を保存する機能が必要
2007年度ゲームプログラミング
跳ね返り方を変える(3)


処理の流れ
if(バーをボールで跳ね返す条件){
dy=-dy; // 通常の跳ね返り処理
if(バーが右に動いている)dx++;
if(バーが左に動いている)dx--;
}
ゲームが簡単になり過ぎないよう、調整が必
要(上の壁ではランダムで跳ね返る、等)