0

我遇到了一个小问题。当我重新启动游戏时(通过运行我自己的初始化方法),我可以成功地重新加载我的所有对象/变量。但是在SoundEffectInstance创建新实例时,我使用的首字母会继续播放。这导致同时播放同一音乐的多个实例。

我想要实现的是一种在制作新实例时摆脱第一个实例的方法。

instance.Dispose();不能使用,因为这意味着我无法重新初始化声音。

我尝试使用列表来解决这个问题(在重新启动游戏之前删除实例),但似乎我不能CreateInstance()从列表中,限制我初始化声音开始。

数组似乎也没有提供解决方案。有任何想法吗?

4

2 回答 2

1

首先,您可能不应该将 SoundEffectInstance 用于音乐 - 这会导致整首歌曲未压缩地加载到 RAM 中 - 相对于使用音乐从磁盘流式传输 MP3/WMA 会占用大量空间。

如果要处理所有内容,则应卸载包含所有内容的 ContentManager。然后您可以重新创建内容 - 从磁盘重新加载它需要一些时间,但如果这是您所追求的,您将拥有一组干净的内容。请记住,SoundEffectInstance 包含非托管资源,因此“删除”它的唯一方法是释放它或卸载它的 ContentManager。

如果您不想这样做,那么您应该保留对您的内容的引用,然后您可以手动执行诸如停止之类的操作:

http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.audio.soundeffectinstance.stop.aspx

于 2014-11-19T15:26:13.980 回答
0

你应该使用mediaplayer.play()而不是SoundEffectInstance来播放歌曲,然后你可以有一个 if 语句,你可以说如果X发生然后mediaplayer.play() 否则 mediaplayer.stop() ; 或 mediaplayer.pause()

于 2014-11-20T11:01:15.203 回答