我正在制作的游戏中有多个对象,并且在弄清楚如何播放声音而不播放相同的声音两次或更多次时遇到了重大问题。我想知道你是否有任何技巧/提示如何让声音只播放一次,无论它制作了多少个实例并保持平衡,而不是让它播放 50 次是超级响亮的。
我正在使用 XNA.Framework.Audio.SoundEffectInstance 播放声音。
在实例类中,您可以创建一个布尔值的静态变量。
当一个实例发出声音时,首先让它检查静态变量。如果变量为真,则不播放声音。如果为假,则播放声音。
声音播放完毕后,将静态变量设置为 false,以便下一个实例可以播放声音。
例子:
public static bool is_playing = false;
这更像是一个混合问题而不是编程问题。播放两次样本总是会产生更完整的效果。
从程序化的角度来看,您可以确保声音不会同时播放两次。为此,请在每次播放声音时设置一个布尔值。在播放声音之前,请确保布尔值为 false 或取消事件。播放声音后,将布尔值设置为 false。
这是一个非常通用的答案,但也许您可以创建不同的声音类(例如,射击声音、移动声音、环境声音)。
播放声音时,您可以播放每个班级的当前声音,同时静音该班级的所有其他声音。
例如,对于每一次枪声,每次枪声之间的时间可能比播放声音所需的时间短。对于每一次新的枪声,只需将射击声音池中的所有其他声音静音即可。
为此,您可以将射击声音对象添加到射击声音数组中,并且对于每个游戏帧,检查以确保没有新声音。如果有新声音,请在播放新声音之前遍历声音数组以使所有内容静音。
然后,您可以制作多个声音阵列(行走/环境),这样您的拍摄声音就不会切断行走声音/环境声音。