替代soundeffect.play()?

我一直在使用一个探查器来优化我的Xbox游戏,我的目标是像任何优化,以减less多余的CPU和内存使用量。 我设法减less了我的游戏所使用的大量处理器时间和内存。 不过,在我的游戏中,有很多子弹是玩家触发的,每一次子弹都会触发soundeffect.play()方法来发挥爆炸效果。 我想知道是否有更有效的方法来玩爆炸效果?

你可以看看SoundEffectInstance 。 你可以得到一个SoundEffect.CreateInstance (并且必须在完成之后Dispose它)。

SoundEffect.Play内部创建SoundEffectInstance对象并播放它们。 然后将它们添加到内部列表中,以便一旦该音效完成播放,它将被停止并添加回池中。 下一次调用SoundEffect.Play ,它将尝试从池中获取备用实例,然后分配另一个实例。

通过自己使用SoundEffectInstance ,可以预先分配所需数量的声音实例,因此如果池为空,则不需要分配成本。 你可以节省(跟踪)那些内部的“火灾和遗忘”声音实例的(小)开销。

这也可以让你限制一次播放声音的数量(保存CPU)。 例如,如果您创建了三个声音实例(在循环缓冲区中),并且您的游戏有连续四次触发该声音的情况 – 第四个触发器可以切断最老的声音,重新启动它,或者跳过播放新的声音。