本教程系列的最后一讲将介绍怎样为你的游戏加上声音。由于这是针对初学者的教程,所以我不会讨论复杂的音频技术,如OpenGL和Audio Queue。今天的主题是播放一段短的声音(少于30秒)。如果你不要求任何背景音乐,这将是最容易的播放音频的方式了。这种方式的缺点是一次只能播放一个音频文件。好,我们开始吧……先从上次教程的代码开始。我们今天将使用两种声音,一个是击打球的声音,另一个是得分的声音。
下面是你需要下载的音频文件:
注意文件的格式是.caf。你所有音频文件格式必须符合在iPhone上播放的要求。Apple提供了一个工具将音频转换成这种格式。这里是参考。很简单,打开终端输入:
/usr/bin/afconvert -f caff -d LEI16 {INPUT} {OUTPUT}
{INPUT}是输入音频文件路径,{OUTPUT} 是你想要存放的.caf文件路径。
将音频文件添加到项目中
将下载好的音频文件拖放到项目下的Resources文件夹。如果你还希望 安排得更为有序些的话,你还可以建立一个Audio子文件夹。请确定在“copy the files into your project’s directory”检查框上打勾。
添加AudioToolbox.framework到项目
由于我们要用到此框架的一些函数,所以我们必须将此框架加入项目中。右击项目中的Frameworks文件夹选择Add -> Existing Frameworks。在搜索框内输入AudioToolbox.framework 然后选择搜索结果中的框架。(请确定点取了Computer 以搜索整个电脑)。
找到所需框架后,按Add。现在我们已经准备好写代码了……
头文件声明
打开 iTennisViewController.h 加入下列代码:
首先我们看到代码引入AudioServices.h,我们需要使用其中一些函数来播放音频。接下来定义了两个SystemSoundID。它们都是Integers(整数型,也可以使用int,但会引起许多警告信息)。然后打开iTennishViewController.m加入下面代码:
现在我们来初始化声音对象。找到viewDidLoad方法加入下列代码:
很简单吧。第一行是获取音频文件路径。下一行是将路径转换为CFURLRef。最后,加载音频文件并与指定soundID联系起来。注意我们传递的&clappingFileID参数, 这是通过参考地址传递的,因此它允许AudioServicesCreateSystemSoundID方法对其进行修改。我们用同样方法处理击球声。下面,我们可以开始播放了。
声音播放
播放加载好的声音实际上很简单。只需将需要播放文件的soundID传递给AudioServicesPlaySystemSound方法即可。所以播放得分时的鼓掌声只需在reset方法中加入下列代码:
请注意,我们传递的clappingFileID说明我们是要播放鼓掌声。加在gameLoop中加入下列代码将播放球拍击球的声音:
很容易吧?按“Build and Go”试玩我们的游戏吧。源代码下载 。









