160 likes | 281 Views
第6回:音を鳴らそう! (効果音とBGMの再生). ゲームプログラミング. 音ファイルの種類. wavファイル=音の波形データが入っている midiファイル=楽譜データ (音色、音程、鳴らすタイミング)が入っている 携帯では主にmidiを変換したファイルを使う。 docomo→mldファイル au→pmd,mmfファイル(機種によって異なる) vodafone→spf,mmfファイル. gameCanvasでの音の扱い. gameCanvasでは、音を二つに分けて扱っている。 効果音 一度しかならない 同時に多数の効果音が鳴りえる BGM
E N D
第6回:音を鳴らそう! (効果音とBGMの再生) 2008年度ゲームプログラミング ゲームプログラミング
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--; } ゲームが簡単になり過ぎないよう、調整が必要(上の壁ではランダムで跳ね返る、等)