音番号は

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