0

WP7.5/Silverlight 应用程序...

在我的页面加载时,我播放了一个声音剪辑(例如,你好!今天是美好的一天。)

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
    seLoadInstance = seLoad.CreateInstance(); //I initialize this seLoad in Initialize method
    seLoadInstance.Play();
}

现在我在页面上有 3-4 个其他元素。当用户点击其中任何一个时,会播放该元素的声音剪辑。

private void ElementClick_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    seElementInstance = seElement.CreateInstance();
    seElementInstance .Play();
}

我想要的是: 当页面首次加载并且正在播放 seLoadInstance 并且用户单击元素时,我不希望播放 seElementInstance。

我可以像下面一样检查 seLoadInstance 的状态,以不播放 seElementInstance

private void ElementClick_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
  if(seLoadTextInstance.State != SoundState.Playing)
  {     
        seElementInstance = seElement.CreateInstance();
        seElementInstance .Play(); 
   }
}

但上面的问题是我有另一个元素可以在点击时播放 seLoadInstance。

问题:我不知道如何区分 seLoadInstance 是第一次播放还是在元素单击时播放。

可能的解决方案:我看到的一种方法是使用不同的实例来播放相同的声音。

我希望有更好的方法,比如我在加载时设置一个标志,但我找不到任何我可以处理的 SoundInstance completed 或 Stopped 明确事件。

有任何想法吗??

4

2 回答 2

0

直到现在才使用声音,但我所看到的:

为什么要播放声音时总是创建新实例?是否可以为“se”元素创建一个实例并在调用“play”之前检查是否有人在运行?

例如:

private var seLoadInstance;
private var seElementInstance;

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
    seLoadInstance = seLoad.CreateInstance();
    seElementInstance = seElement.CreateInstance();

    seLoadInstance.Play(); // no need to check if something is playing... nothing will be loaded
}

private void ElementClick_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    if(seLoadInstance.State != SoundState.Playing && seElementInstance.State != SoundState.Playing)
    {     
        seElementInstance .Play(); 
    }
}
于 2012-06-13T07:20:58.983 回答
0

我能够找到使用标志的方法。我没有在第一次加载完成时设置标志,而是从我的一个播放 seLoadTextInstance 的元素中设置标志。

如下所示:

private bool isElementLoadSoundPlaying = false; //I set this to true below in another handler

private void ElementClick_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
  //This if means LoadTextInstance is playing and it is the first time play
  if(seLoadTextInstance.State != SoundState.Playing && isElementLoadSoundPlaying == false )
  {     
     return;
  }
  seElementInstance = seElement.CreateInstance();
  seElementInstance .Play(); 
}

private void ElementLoadTextClick_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
  isElementLoadSoundPlaying = true;
  seLoadInstance = seLoad.CreateInstance();
  seLoadInstance.Play();
}
于 2012-06-21T17:16:24.733 回答