你想有一个快速播放音效的方法。
在XNA3.0中,你可以直接从XNA中加载和播放声音,而无需使用Xact加载它们。虽然这个方法移除了一些Xact的高级功能,但可以让播放音效变得非常容易。
首先在项目中添加音效文件,方法与在项目中添加一张图像是一样的,可参见教程3-1。最简单的方法是将一个.wav文件拖动到解决方案的Content文件夹上。
将.wav文件添加到项目中之后,在代码顶部声明一个SoundEffect变量,它将链接到之后的音效文件:
SoundEffect myEffect;
在LoadContent方法中,添加以下代码加载一个.wav文件:
myEffect=Content.Load<SoundEffect>(“effect”);
当你想播放声音时,可以使用以下代码:
myEffect.Play();
SoundEffect.Play()方法有很多重载方法,可以提供更多的控制。最复杂的重载方法有四个参数:
前面的代码已经足以播放音效了,但XNA还提供了SoundEffectInstance类,你可以使用这个类暂停或停止音效,改变音量等,首先要在代码顶部添加一个变量:
SoundEffectInstance myEffectInstance;
当调用SoundEffectInstance的Play方法时,SoundEffect对象会自动转换为一个SoundEffectInstance对象。
现在你可以访问SoundEffectInstance对象,你可以使用这个对象改变音高和音量或者检查它是否已经停止播放:
if (myEffectInstance != null) { myEffectInstance.Volume *= 0.9f; if (myEffectInstance.State == SoundState.Stopped) { myEffectInstance.Dispose(); myEffectInstance = null; } }
这个代码会持续地降低音量,当停止播放时会移除对这个对象的引用。
注意:Zune可以同时播放16个SoundEffectInstance,但加载的SoundEffectInstance数量没有限制。Xbox360可以同时播放300个SoundEffectInstance,但一次只能加载300个SoundEffectInstance。在PC上没有限制。但提醒一点,在写本书的时候,SoundEffectInstance.Play方法有一个bug,它会在使用SoundEffectInstance.Resume方法时被忽略。