这是我正在滚动的设置。鉴于此,如何判断_BGMusic SoundEfect何时结束?我正在运行一个循环几秒钟的游戏循环,我最终想要循环播放这首歌。
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
SoundEffect _BGMUSIC;
public Page1() {
...
LoadSound("sfx/piano.wav", out _BGMUSIC);
...
}
private void LoadSound(String SoundFilePath, out SoundEffect Sound) {
// For error checking, assume we'll fail to load the file.
Sound = null;
try {
// Holds informations about a file stream.
StreamResourceInfo SoundFileInfo =
App.GetResourceStream(new Uri(SoundFilePath, UriKind.Relative));
// Create the SoundEffect from the Stream
Sound = SoundEffect.FromStream(SoundFileInfo.Stream);
FrameworkDispatcher.Update();
} catch (NullReferenceException) {
// Display an error message
MessageBox.Show("Couldn't load sound " + SoundFilePath);
}
}
答案 0 :(得分:0)
从此代码看,您刚刚将声音存储在Sound
中,但未显示实施Sound.Play()
方法的位置。虽然没有Sound.IsPlaying
布尔值可能会解决您的问题,但您可以使用Sound.Duration
属性来解决问题,尤其是如果您将其与Timer
结合使用(它可以串联使用来设置一个标志,以显示声音是否正在播放。
我从未使用的是just found Sound.IsDisposed
属性。我肯定会研究这个问题,因为它可能正是你正在寻找的东西。
答案 1 :(得分:0)
好的,所以这个问题的答案实际上非常简单,并在微软的MSDN页面中很好地概述(一次)。
要使用上面的内容实现它,您需要执行以下操作。
创建全局SoundEffectInstance
SoundEffectInstance _BGMUSICINSTANCE;
在我的示例中,我在main方法中初始化SoundEffect,因此在其下面我想初始化SoundEffectInstance。
_BGMUSICINSTANCE = _BGMUSIC.CreateInstance();
现在实例已加载并准备就绪,我们可以将其loop属性设置为true。您也可以在main方法中或任何您想要的位置执行此操作。这是全球性的
_BGMUSICINSTANCE.IsLooped = true;
最后播放歌曲
_BGMUSICINSTANCE.Play();
参考页面 http://msdn.microsoft.com/en-us/library/dd940203(v=xnagamestudio.31).aspx