WP7.5 / Silverlight App ...
在我的页面加载中,我播放一个声音片段(例如Hello!今天是美好的一天。)
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完成的任何显式事件或者我可以处理的Stopped。
任何想法??
答案 0 :(得分:0)
直到现在还没有使用过声音,但我看到了:
为什么要在播放声音时始终创建新实例? 在调用“play”之前,是否有可能为“se”元素创建一个实例并检查是否有人正在运行?
例如:
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();
}
}
答案 1 :(得分: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();
}