首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C# XNA中不使用“dispose”删除SoundEffectInstance

在C# XNA中不使用“dispose”删除SoundEffectInstance
EN

Stack Overflow用户
提问于 2014-11-19 05:01:57
回答 2查看 185关注 0票数 0

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

我试图实现的是一种在创建新实例时摆脱第一实例的方法。

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

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

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

EN

回答 2

Stack Overflow用户

发布于 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

票数 1
EN

Stack Overflow用户

发布于 2014-11-20 19:01:15

你应该使用mediaplayer.play()而不是SoundEffectInstance来播放一首歌,然后你可以只有一个if语句,你可以说如果X发生了then mediaplayer.play() or SoundEffectInstance

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27003959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档