我遇到了一个小问题。当我重新启动游戏时(通过运行我自己的initialize方法),我可以成功地重新加载所有的对象/变量。但在创建新实例时,我使用的初始SoundEffectInstance会继续播放。这会导致同一音乐的多个实例同时播放。
我试图实现的是一种在创建新实例时摆脱第一实例的方法。
无法使用instance.Dispose();,因为它意味着我无法重新初始化声音。
我尝试使用列表来解决这个问题(在重启游戏之前删除实例),但是我似乎不能从列表中CreateInstance(),这限制了我一开始就不能初始化声音。
数组似乎也没有提供解决方案。有什么想法吗?
发布于 2014-11-19 23:26:14
首先,你可能不应该使用SoundEffectInstance播放音乐--这会导致整首歌未经压缩地加载到内存中--相对于使用音乐从磁盘流传输一首MP3/WMA,这会消耗大量的空间。
如果您想要处理所有内容,那么您应该卸载包含所有内容的ContentManager。然后您可以重新创建内容-从磁盘重新加载它将需要一些时间,但如果这是您想要的,您将拥有一组干净的内容。请记住,SoundEffectInstance包含非托管资源,因此“移除”它的唯一方法是处置它或卸载它的ContentManager。
如果你不想这样做,那么你应该保留对你的内容的引用,然后你可以手动做像stop这样的事情:
http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.audio.soundeffectinstance.stop.aspx
发布于 2014-11-20 19:01:15
你应该使用mediaplayer.play()而不是SoundEffectInstance来播放一首歌,然后你可以只有一个if语句,你可以说如果X发生了then mediaplayer.play() or SoundEffectInstance
https://stackoverflow.com/questions/27003959
复制相似问题