使用 XNA/Sound 创建简单的 3D 游戏
在 XNA 中使用音效可能有点繁琐,因为需要使用一个外部应用程序 XACT 工具(可在 XNA 开始菜单文件夹的工具文件夹中找到)将声音文件处理成“提示”文件,才能在项目中使用。可以直接在代码中播放“.Wav”文件,但您将无法调整声音的属性,正如您将在下面看到的那样。打开 XACT v3,您应该会看到以下屏幕。
在本项目中,我们将使用两个音效,一个每次碰撞到鱼时播放的开放许可声音效果文件,以及从 Newgrounds 音频门户 获取的循环音乐文件,这是一个针对独立游戏的良好资源(在 Xbox Arcade 上可用的游戏“Castle Crashers”的所有音乐都来自此网站),可以免费使用。这两个音效都可以在主页面上的完整示例中找到。请注意,声音必须先转换为“.Wav”文件才能使用,为此,我使用了音频转换实用程序 dBpoweramp。
我们将加载的每个声音都将存储在一个“波形库”中,该库包含程序在运行时流式传输的原始音频数据。然后,关于如何播放这些文件的说明将存储在一个“声音库”中,该库包含“声音”,其中包含要播放的每个声音的属性,以及“提示”,将在程序中引用。
创建一个新项目(在我的例子中称为“FishSounds”),右键单击屏幕左侧的“波形库”标签,然后选择“新建波形库”。右键单击新建的波形库,然后选择“插入波形文件”,并打开两个波形文件。
接下来,右键单击您的声音库,并创建一个新的声音库。右键单击新库并创建两个新的“声音”,一个名为“Effect”,另一个名为“Music”。将“波形库”中的条目拖放到相应的“声音库”中。如果您选择一个新的“声音库”,您将在左侧看到一组选项。我们这里唯一需要关注的是顶部的“循环”/“无限”复选框,但您可以随意调整其他任何选项。单击您的“Music”声音,然后单击下面的复选框。
以与声音相同的方式创建两个新的提示,并与之前一样将它们重命名为“Effect”和“Music”,并将相应的“Sound”拖放到它们中。
现在保存您的项目,然后返回您的游戏项目。右键单击您的“Content”文件夹,并添加新创建的“FishSounds.xap”项目文件。
创建以下 3 个新的类变量;
AudioEngine audioEngine;
WaveBank waveBank;
SoundBank soundBank;
以及以下行到您的“LoadContent()”方法中。
audioEngine = new AudioEngine("Content\\FishSounds.xgs");//The new audio project
waveBank = new WaveBank(audioEngine, "Content\\Wave Bank.xwb");//The name of the Wave bank
soundBank = new SoundBank(audioEngine, "Content\\Sound Bank.xsb");//The name of the Sound bank
如果您在此时编译代码,并且出现有关找不到声音效果的错误消息,请更改 XACT 中“.Wav”文件的路径。
现在,为了播放背景音乐,请将以下行插入到您上面的初始化代码之后。
soundBank.PlayCue("Music");
并将您的碰撞检测代码更改为以下内容。
if (CheckCollision(FishMen.Translation, OtherFishes[i].Translation)
&&
OtherFishes[i].clip == OtherFishes[i].skinningData.AnimationClips["Frown"])
{
OtherFishes[i].PlayAnimation("Smile");
soundBank.PlayCue("Effect");
}
现在运行您的代码,您应该拥有一个功能完备的音效系统。