この文書では、効果音(サウンドエフェクト)およびBGMを再生する手順について説明します。
Contents
では、プログラム開始時にBGMをループ再生し、ボタンを押したときに効果音を鳴らすようにしてみましょう。
まず、再生したい効果音ファイルとBGMファイルをプロジェクトに登録します。
sample/Tutorial/Sample06_01/Sample06_01.slnを開いてください。
- PSM Studioのソリューションエクスプローラで、soundフォルダーを選択し、右クリック - [追加] - [ファイル]を追加 で再生したいファイルを選択します。
- ファイルを登録したら、ファイルを右クリックし、[Build Action] - [Content] を選択しておきます。
- 現在、効果音のファイル形式はWAV形式のみ対応しています。
- 現在、BGMのファイル形式はmp3形式のみ対応しています。
- ファイルを登録するフォルダーはsoundでなく、任意の場所でも構いません。
効果音
効果音の再生にはSoundクラスとSoundPlayerクラスを使用します。
Sound soundBullet; public SoundPlayer soundPlayerBullet; ... soundBullet = new Sound("/Application/sound/Bullet.wav"); soundPlayerBullet = soundBullet.CreatePlayer();Soundクラスは効果音のデータを表すクラスです。
SoundPlayer クラスは、効果音の再生用のクラスです。
1つのSoundクラスに対して、複数のSoundPlayerを使用することにより、1種類の効果音を複数同時に再生することができます。
BGM
BGMの再生には、BgmクラスとBgmPlayerクラスを使用します。
Bgm bgm; public BgmPlayer bgmPlayer; ... //@j BGMの初期化。 bgm = new Bgm("/Application/sound/GameBgm.mp3"); bgmPlayer = bgm.CreatePlayer(); bgmPlayer.Loop = true;Bgm クラスはBGMのデータを表すクラスです。
BgmPlayer クラスは、BGMの再生を行うためのクラスです。
Bgm は同時に1つだけしか再生することができません。そのため BgmPlayer を複数作成することはできません。
ここではBGMが終了したときループ再生するように、bgmPlayer.Loopにtrueを設定しています。
効果音を鳴らすには、SoundPlayerのPlay()を呼び出します。 以下の例では○ボタンまたは×ボタンを押したときに発射音が鳴ります。
sample/Tutorial/Sample06_01/Player.cs
if((gs.PadData.ButtonsDown & (GamePadButtons.Circle | GamePadButtons.Cross)) != 0) { gs.soundPlayerBullet.Play(); ... }BGMを再生するにはBgmPlayer.Play() を呼び出します。
sample/Tutorial/Sample06_01/GameFrameworkSample.cs
bgmPlayer.Play();
ついでにボタンを押したとき、弾を発射できるようにしておきましょう。
星と同じ要領で弾のクラスを作ります。
sample/Tutorial/Sample06_01/Bullet.cs
public class Bullet : GameActor { static int idNum=0; float speed=6; Vector2 trans; public Bullet(GameFrameworkSample gs, string name, Texture2D textrue, Vector3 position, float speed, float direction) : base (gs, name) { Name = name + idNum.ToString(); this.sprite = new SimpleSprite( gs.Graphics, textrue); this.sprite.Position = position; this.sprite.Center.X = 0.5f; this.sprite.Center.Y = 0.5f; this.speed = speed; this.trans.X= FMath.Cos((direction-90.0f)/180*FMath.PI); this.trans.Y= FMath.Sin((direction-90.0f)/180*FMath.PI); idNum++; } public override void Update() { sprite.Position.X = sprite.Position.X+trans.X * speed; sprite.Position.Y = sprite.Position.Y+trans.Y * speed; if (sprite.Position.X < 0 || gs.rectScreen.Width < sprite.Position.X || sprite.Position.Y < 0 || gs.rectScreen.Height < sprite.Position.Y) { this.Status = Actor.ActorStatus.Dead; } base.Update(); } }Playerクラス内のUpdate()で、ボタンを押したときにBulletクラスのインスタンスを生成し、アクターのツリーに登録するようにします。
sample/Tutorial/Sample06_01/Player.cs
if((gs.PadData.ButtonsDown & (GamePadButtons.Circle | GamePadButtons.Cross)) != 0) { gs.soundPlayerBullet.Play(); gs.Root.Search("bulletManager").AddChild(new Bullet(gs, "bullet", gs.textureBullet, new Vector3(this.Sprite.Position.X, this.Sprite.Position.Y, 0.4f), 6.0f, 0.0f)); }実行してみると、ゲーム開始時にBGMが再生されます。 また、ボタンを押したときに効果音が再生され、弾が発射されるようになっています。