我正在尝试决定如何在程序中实现声音效果。我在两个选项之间进行辩论。
1)创建一个抽象接口(interface)SoundEffect
,并从中获得每种声音效果。每个声音效果都是其自己的类别。构建后,它会打开声音文件并播放,而销毁后会关闭该文件。我看到的这种方法的主要缺点是,我将有很多非常小的对象,这将大大增加文件数量。我可以将多个声音效果放在一个 header (相关的 header )中,但是我不确定。
2)由于任何声音效果的播放都调用相同的东西,唯一的不同是它打开的文件,因此我可以创建一个SoundEffect类,其构造函数是一个包含声音效果名称的枚举器。全类将使用开关播放适当的声音。
显然,我在辩论OOP方法和更“传统”的方法,我想知道这里最好的设计选择是什么。我非常倾向于OOP方法,但是不确定如何构造文件。如果您还有其他建议,很高兴听到他们的建议。
最佳答案
如果我理解正确,那么您正在对所有可能声音的声音效果进行硬编码吗?
这听起来是错误的,您针对不同的行为而不是针对不同的数据创建了不同的子类。
如果您有某些需要对数据进行预处理的声音效果类型,则子类很有意义-如果项目较大,则可能需要分离效果处理代码和效果参数,以便可以在不重建应用程序的情况下更改效果(例如FMOD分离编码和声音设计)。
要播放不同的声音文件,只需让类的构造函数获取声音文件的路径或某些资源ID-此处无需switch
。
如果您要处理大量重复使用的声音文件,则基于池的方法将有助于避免每次播放文件时都重新加载文件。一种实现习惯是flyweight模式(有关实现,请参见Boost.Flyweight)。
关于c++ - 音效的设计选择,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2125003/