C# 阻止SoundEffect循环

C# 阻止SoundEffect循环,c#,visual-studio,xna,C#,Visual Studio,Xna,我正在用C#/XNA制作一个游戏,这是一个俯视式赛车游戏,我想在我的车撞到墙上时播放音效 问题是,我的声音一直在循环,所以当我撞到墙上时,歌曲会立即开始播放,但我希望它播放,播放完后,可以再次播放 下面是处理冲突的代码: if(map[x][y]==0) { car.speed=0; crash.Play(); } 如果我有什么不清楚,请问我 提前感谢!您可能需要查看SoundEffectInstance类。下面是一个关于如何正确使用它的示例 您可以检查音效状态,查看当前是否正在播放 编辑:我

我正在用C#/XNA制作一个游戏,这是一个俯视式赛车游戏,我想在我的车撞到墙上时播放音效

问题是,我的声音一直在循环,所以当我撞到墙上时,歌曲会立即开始播放,但我希望它播放,播放完后,可以再次播放

下面是处理冲突的代码:

if(map[x][y]==0)
{
car.speed=0;

crash.Play(); }
如果我有什么不清楚,请问我


提前感谢!

您可能需要查看
SoundEffectInstance
类。下面是一个关于如何正确使用它的示例

您可以检查音效状态,查看当前是否正在播放

编辑:我添加了一个更完整的代码,因为我觉得需要它。它与我提供的链接中的示例大致相同。(注意:此代码未经测试)

//在您的内容加载中
声效碰撞;
crash=Content.Load(“PathToYourSoundEffect”);
SoundEffectInstance sei=crash.CreateInstance();
//在您的更新代码中
if(sei.State==SoundState.Stopped | | sei.State==SoundState.Paused)
{
sei.Play();
}

您可能需要查看
SoundEffectInstance
类。下面是一个关于如何正确使用它的示例

您可以检查音效状态,查看当前是否正在播放

编辑:我添加了一个更完整的代码,因为我觉得需要它。它与我提供的链接中的示例大致相同。(注意:此代码未经测试)

//在您的内容加载中
声效碰撞;
crash=Content.Load(“PathToYourSoundEffect”);
SoundEffectInstance sei=crash.CreateInstance();
//在您的更新代码中
if(sei.State==SoundState.Stopped | | sei.State==SoundState.Paused)
{
sei.Play();
}
调用以获取。然后在调用之前将属性设置为false:

调用以获取。然后在调用之前将属性设置为false:


以下是您问题的完整答案:


但是,默认情况下,SoundEffect不应循环…

以下是您问题的完整答案:


但是,默认情况下,SoundEffect不应循环…

Crash是SoundEffectCrash是SoundEffect但是如果我输入Crash.State==SoundState.stopped,它会说该状态不存在,我应该为此创建一个实例吗?您必须创建一个
SoundEffectInstance
来包装崩溃声音。然后您将能够检查ound的当前状态。请参阅我提供的示例链接,它非常清晰简洁。但是如果我输入crash.state==SoundState.stopped,它会说该状态不存在,我应该为此创建一个实例吗?您必须创建一个
SoundEffectInstance
来包装崩溃声音。然后您将能够检查声音的当前状态。See我提供的示例链接,非常清晰简洁。我想尝试一下,不使用soundeffectinstance类,我只想知道soundeffect何时结束播放,所以当它结束时,我可以再次启动它。我想尝试一下,不使用soundeffectinstance类,我只想知道soundeffect何时结束播放,所以当它结束时,我可以再次发射它。
//In your content load
SoundEffect crash;
crash = Content.Load<SoundEffect>("PathToYourSoundEffect");
SoundEffectInstance sei = crash.CreateInstance();

//In your update code
if(sei.State == SoundState.Stopped || sei.State == SoundState.Paused)
{
    sei.Play();
}
crashSoundEffectInstance.IsLooped = false;
SoundEffectInstance instance = soundEffect.CreateInstance();
instance.IsLooped = true;