C# 单游戏音效碰撞
我正在尝试用C#和Monogame引擎重新编程一些旧的街机游戏。然而,我遇到了一个问题 由于我的代码往往有点混乱,所以当玩家成功完成游戏时,我通常不会努力重置所有内容。相反,我只是关闭当前游戏实例并打开一个新实例,如下所示:(在Program.cs中) 现在问题来了。在游戏1中,我宣布并播放各种音效。第一次运行一切正常,但在接下来的所有Game1实例中,我的程序总是抛出一个与SharpDX.XAudio2.dll相关的System.AccessViolationException,此时我正在调用SoundEffect的.Play()-方法 我尝试播放SoundEffect实例,而不是实际的SoundEffects。现在它不再崩溃,而是从第二级开始完全沉默 你知道这个错误的原因是什么吗?我的游戏重新启动循环是否导致了我不知道的问题 先谢谢你 (我使用的是64位Win 7、VS Express 2015和Monogame 3.6) 你知道这个错误的原因是什么吗?我的游戏重新启动循环是否导致了我不知道的问题 对。不要这样做。 您正在销毁整个游戏对象只是为了重置游戏。这是一种非常糟糕的样式,因为它会破坏整个实例以及与之相关的所有内容。如果在其中使用C# 单游戏音效碰撞,c#,visual-studio,audio,monogame,C#,Visual Studio,Audio,Monogame,我正在尝试用C#和Monogame引擎重新编程一些旧的街机游戏。然而,我遇到了一个问题 由于我的代码往往有点混乱,所以当玩家成功完成游戏时,我通常不会努力重置所有内容。相反,我只是关闭当前游戏实例并打开一个新实例,如下所示:(在Program.cs中) 现在问题来了。在游戏1中,我宣布并播放各种音效。第一次运行一切正常,但在接下来的所有Game1实例中,我的程序总是抛出一个与SharpDX.XAudio2.dll相关的System.AccessViolationException,此时我正在调用
静态
变量,它们将保留在内存中,这可能是您遇到的问题
如果您想重置游戏,只需为所有内容编写一个reset
-方法,并调用这些方法即可。清理和良好的代码是你应该使用的东西,而不是可怕的黑客
您能否显示更多的代码,以便能够理解出哪里出了问题
PS:永远不要写类似于
while(continueGame==true)
的东西,始终选择while(continueGame)
问题可能是由于SharpDX对媒体文件本身的反应。例如,在XNA 4.0下作为SoundEffect加载的MP3文件(与相关的SoundEffectInstance一起)可以在MonoGame UWP下使游戏崩溃。(发生在我身上的是一个文件,但崩溃开始时我已经在使用SoundEffectInstance了。)
因此,您是否尝试过对相关音频文件进行重新编码,例如通过类似的实用程序?虽然它本身可能无法解决内部问题(音频文件的某些元素破坏了SharpDX),但如果重新编码的文件一开始就没有问题元素,那么这应该是一个有效的解决方案
if (startgame)
{
do
{
using (var game = new Game1(level, points, soundOn))
game.Run();
} while (continueGame == true);
}