LibGDX - 当声音重叠时,如何防止声音播放太大?

4
我正在构建的游戏中,音量出现了问题。例如,当我发射火箭时,爆炸会产生爆炸半径,任何在该半径内的敌人都会被杀死。
当一次只杀死一个敌人时,死亡音效(一个小小的尖叫声)的音量很完美,但是当4个敌人在同一次爆炸中被杀死时,声音会播放4倍响亮。
我曾考虑过添加检查来查看是否已经播放声音,如果没有则只播放一次,但我决定不这样做,因为如果第二个敌人在半秒钟后被杀死,那么只会播放一个尖叫声。
我希望实现的是,重叠的声音实例都以相同的音量播放,而不是增加整体音量。请问应该如何实现?

请参考以下链接:http://gamedev.stackexchange.com/questions/76312/how-to-prevent-overlapping-of-gunshot-sounds-when-using-fast-firing-weapons 或者 http://gamedev.stackexchange.com/questions/60939/how-to-prevent-multiple-playing-sounds-from-destroying-your-hearing (这些内容并非特定于libgdx)。 - P.T.
谢谢P.T. - 这两个链接都没有一个精确的解决方案适用于我的问题,但是它们的结合让我开始思考正确的方向来想出一个可行的解决方案 :) - 1337ingDisorder
1个回答

3

P.T.评论中提供的链接让我考虑限制任何给定声音的并发播放。

我想出的解决方案非常简单:每当触发可以重叠的声音时,我只需在其播放之前停止该声音。

而不是:

if (prefs.isSoundEnabled())
    sndExplosion.play();

我只是将它扩展为:
if (prefs.isSoundEnabled()) {
    sndExplosion.stop();
    sndExplosion.play();
}

结果是,如果已经正在播放爆炸声音或者同时触发多个爆炸声音,那么每次只会播放一份声音副本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接