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--; } ゲームが簡単になり過ぎないよう、調整が必 要(上の壁ではランダムで跳ね返る、等)
© Copyright 2024 ExpyDoc