如何处理游戏声音的收集?

时间:2012-02-28 21:53:20

标签: iphone

我们正在开发一些具有各种声音效果以及口头短语和表达的游戏。当前设计将声音片段存储为单独的编号文件。一组#defines将人类可读的名称映射到文件名。例如:

#define SOUND_COOL              @"0038"  // Cool!
#define SOUND_YOU_GOT_IT        @"0039"  // You got it!
#define SOUND_FANTASTIC_1       @"0040"  // Fantastic! version 1
#define SOUND_FANTASTIC_2       @"0041"  // Fantastic! version 2

这种方法的一个优点是代码变得非常易读。你可以通过阅读看到会播放什么声音。

其中一个问题是我们有很多语调或某些短语的版本。在适当的情况下,手动编码的switch语句从可用版本中随机选择。

如果有多个可用的话,可以概括一下并且可以选择播放随机版本。这里的一个选择可能是放弃#define方法并创建一个合适的数据库表,其中的字段允许选择符合给定条件的所有声音文件。然后,类和方法将封装所需的功能。

在可能有数百个声音文件的应用程序中组织/编目声音的其他一些想法是什么?

2 个答案:

答案 0 :(得分:2)

NSDictionary怎么样?您可以将字典存储在plist中并在启动时加载一次。键将是某种声音ID(@“酷”,@“你得到它”等),值可以是字符串或数组。

一个字符串表示只有一个声音,所以播放它;数组意味着有多个选择,所以选择一个随机选择。

你可以将所有这些包装在一个类中,所以如果你进行了如下调用:

[soundBox playSound:@"Cool"];

soundBox会有这样的代码:

id obj = [myDictionary objectForKey:key];
if ([obj isKindOfClass:[NSString class]]) {
    // play the sound in file named obj
} else if ([obj isKindOfClass:[NSArray class]]) {
    // pick a random sound from the array obj
}

答案 1 :(得分:0)

一些想法:

  • 为每个声音创建一个文件夹,每个文件夹中有多个文件,每个语调一个。
  • 将所有语调放入同一个文件中,每个声音一个文件,存储一组值或帧时间戳,以开始和结束播放文件中的每个语调
  • 将所有语调和声音合并到一个文件中,代码中的指针可能只是文件中的起点和终点