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