本文將介紹如何使用 Visual Studio 和 XNA 在 Windows Phone 游戲中播放聲音和音樂。
添加聲音文件
我們首先需要在 Content 項目中添加兩個聲音文件,一個是 energy.wav,另一個是 won.mp3。
需要注意的是,這些文件需要符合一定的規(guī)范,否則無法被 XNA 識別,編譯將出錯。
加載聲音
在 Game 類的 LoadContent 方法中,我們載入這兩個聲音,一個作為 SoundEffectInstance 類型,另一個作為 Song 類型,并保存在 sound 和 song 字段中。載入時,需要注意路徑和資源的資產名稱要匹配。
private SoundEffectInstance sound;
private Song song;
protected override void LoadContent ( )
{
// TODO: 在此處使用 this.Content 加載游戲內容
this.sound = this.Content.Load<SoundEffect> (
@"sound/energy"
).CreateInstance ( );
this.song = this.Content.Load<Song> (
@"sound/won"
);
}
SoundEffectInstance 類型
你可以直接使用 SoundEffect 類型來播放聲音,比如:子彈的聲音,但你無法在聲音播放時,播放另一個子彈的聲音。而使用 SoundEffectInstance 則可以解決這個問題,你可以創(chuàng)建多個 SoundEffectInstance 來同時播放多個聲音(同一個聲音),比如:
SoundEffect bullet =
this.Content.Load<SoundEffect> (
@"sound/energy"
);
// 省略了代碼。
SoundEffectInstance bullet1 = bullet.CreateInstance ( );
SoundEffectInstance bullet2 = bullet.CreateInstance ( );
bullet1.Play ( );
bullet2.Play ( );
此外 SoundEffectInstance 有另外兩個重要的屬性,State 表示當前的狀態(tài)(播放,停止,暫停),Volume 表示音量。
Song 類型
Song 類型需要使用 MediaPlayer 類,也就是使用 Windows Phone 自帶的 Media Player 來播放,而且同時只能播放一首音樂。我們判斷游戲是否具有 Media Player 的控制權并且確定音樂是否不在播放狀態(tài),如果是則播放我們的音樂。
if ( MediaPlayer.GameHasControl && MediaPlayer.State != MediaState.Playing ) MediaPlayer.Play ( this.song );
如果需要控制音量和循環(huán),則需要訪問 MediaPlayer 的屬性,IsRepeating 表示是否重復播放,Volume 表示 Media Player 的音量,State 表示播放狀態(tài)。
好了,這里簡單的給大家介紹了如何通過 XNA 中播放音樂,更多 XNA 內容,我們下次介紹。