Windows-Phone-7:检查是否有一个soundffectinstance实例正在播放
本文关键字:实例 播放 soundffectinstance 有一个 检查 是否 Windows-Phone-7 | 更新日期: 2023-09-27 18:05:26
我有一个按钮,将控制声音效果。当点击按钮时,声音应该开始播放。如果你在声音还在播放的时候点击它,它应该会停止播放声音。如果你在声音自己停止播放后点击它,声音应该会重新开始播放。
我已经尝试过了,但是我使用的SoundState方法不正确,因为它不起作用:
public void playGenericSound(string fileName)
{
if (playingSound.State != SoundState.Playing)
{
using (var stream = TitleContainer.OpenStream(fileName))
{
var effect = SoundEffect.FromStream(stream);
playingSound = effect.CreateInstance();
FrameworkDispatcher.Update();
playingSound.Play();
}
}
else
{
playingSound.Stop();
}
}
任何想法?提前感谢!会的。
对于XNA应用程序:
在update()方法检查你的声音效果的playingSound。状态字段,如果播放已停止,则播放另一个。
Silverlight的:
这部分有点棘手,因为SoundEffectInstance是作为XNA的一部分设计的。例如,您可以使用Timer创建自己的循环,并在事件处理程序中添加状态检查逻辑。
第二个想法是使用计时器,它的间隔设置为播放声音的持续时间,并添加一个标志,如bool isPlaying。当你第一次播放时,设置isPlaying标志为true并开始计时。在计时器处理程序中,将isPlaying标志设置为false。每次你按下按钮检查isPlaying标志。换句话说,创造你自己的游戏状态逻辑。我想我应该把我在一个程序中所做的事情贴出来,我现在正在为某人工作。
// Play Audio File and allow stop
if (new Rectangle(rV.X, rV.Y, rect.Width, rect.Height).Contains(mosX, mosY) && mouseClick)
{
if (driversmeeting.State != SoundState.Playing && !globalAudioPlaying)
{
globalAudioPlaying = true;
driversmeeting.Play();
}
else if (driversmeeting.State == SoundState.Playing)
{
driversmeeting.Stop();
globalAudioPlaying = false;
}
}