【问题标题】:Stop the SoundEffect from looping停止 SoundEffect 循环
【发布时间】:2012-11-16 16:06:50
【问题描述】:

我正在用 C#/XNA 构建一个游戏,它是一个顶视图赛车游戏,我想在我的车撞到墙上时播放声音效果。

问题是我的声音一直在循环,所以当我撞墙时,歌曲会立即开始播放,但我想让它播放,等它播放完后,再播放一遍。

这是处理碰撞的代码:

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

crash.Play(); }

如果我有什么不清楚的地方请问我。

提前致谢!

【问题讨论】:

  • 崩溃是音效

标签: c# visual-studio xna


【解决方案1】:

这里是您问题的完整答案:http://msdn.microsoft.com/en-us/library/dd940203.aspx

SoundEffectInstance instance = soundEffect.CreateInstance();
instance.IsLooped = true;

但是,默认情况下,SoundEffect 不应该循环播放...

【讨论】:

    【解决方案2】:

    致电SoundEffect.CreateInstance() 获取SoundEffectInstance。然后在调用Play之前将IsLooped属性设置为false:

    crashSoundEffectInstance.IsLooped = false;
    

    【讨论】:

    • 我想试试,不使用soundeffectinstance类,我只想知道音效什么时候结束播放,等结束后,我可以再次触发。
    【解决方案3】:

    您可能想查看SoundEffectInstance 类。这是一个example,告诉你如何正确使用它。

    可以查看音效状态是否在播放

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

    //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();
    }
    

    【讨论】:

    • 但是如果我输入 crash.State == SoundState.stopped,它说 State 不存在,我应该为此创建一个实例吗?
    • 你必须创建一个SoundEffectInstance 来包裹你的崩溃声音。然后您将能够检查声音的当前状态。请参阅我提供的示例链接,它非常清晰简洁。
    猜你喜欢
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2019-07-29
    相关资源
    最近更新 更多