2011-06-14 50 views
0

这是一直困扰我的东西。如果我通过SoundEffect.CreateInstance()创建SoundEffectInstance,我打算在完成它时处理它。据我所知,SoundEffect.CreateInstance()不使用ContentManager是否每次都从文件加载SoundEffect.CreateInstance?

那么它是从文件加载还是保存在内存中的副本?从文件加载显然会很慢: -/

+0

你应该在那里问你的问题:http://gamedev.stackexchange.com/ – 2011-06-14 23:51:50

+0

我也会在那里尝试,但通常我发现我在这里比在那里得到更好的编程问题答案。 – tweetypi 2011-06-15 00:08:32

回答

3

这是一个实现细节。你不知道,没关系,它可能在不同的平台上有所不同,它可能会在未来发生变化。

但是你可以让一个受过教育的猜测:首先一个事实,即SoundEffectInstance存在,并且您加载声音文件转换SoundEffect表明SoundEffect可能是负责保存在内存中的声音效果。并且存在SoundEffect.FromStream和基于缓冲区的构造函数SoundEffect必须有有一个机制来保存内存中的声音缓冲区。因此,假设从文件加载SoundEffect时使用相同的机制是相当安全的。

如果它真的很重要,可以在加载SoundEffect,然后创建一个实例后,通过删除或修改声音文件来测试它。

一如既往,如果表现真的很重要,那么应该测量它。

当然,创建SoundEffectInstance确实会分配资源(音频声音,托管内容和可能不受管理的内存)。因此,如果您可以避免这种情况,则不应该定期创建这些内容,例如通过汇总和重新使用实例。当您使用SoundEffect.Play时,SoundEffect会在内部为您管理一个SoundEffectInstance对象池。

+0

哦,我明白了。我之所以问这个问题,是因为有时候我需要一个声音来播放和循环,但是在某个点停下来,因此我试图使用SoundEffectInstance。不过,我有点担心这可能是一个不必要的表现流失。问题是我可能会播放一个声音,然后我可能想循环播放它。但设置IsLoop = true会导致无效的函数异常。所以我必须处理实例并重新创建它。 – tweetypi 2011-06-15 03:18:32

+0

@meds只需创建两个实例,一个用于循环,另一个不用。 – 2011-06-15 04:20:53

相关问题