我正在尝试重新编程一些旧的拱门游戏在C#与Monogame引擎。不过,我遇到了一个问题。
由于我的代码可能有点混乱,所以当玩家成功地完成游戏时,我通常不会采取任何措施来重置所有的东西。相反,我只是关闭当前的游戏实例并打开一个新的实例,如:(在Program.cs中)
if (startgame)
{
do
{
using (var game = new Game1(level, points, soundOn))
game.Run();
} while (continueGame == true);
}现在问题来了。在Game1中,我声明并播放各种SoundEffects。第一次运行一切正常,但在Game1-实例中,我的程序在调用System.AccessViolationException ()-Method of a SoundEffect时总是会抛出与SharpDX.XAudio2.dll相关的.Play()-Method。
我试着玩SoundEffectInstances而不是实际的SoundEffects。现在它不再崩溃,而是从第2级开始完全保持沉默。
你知道这个错误的原因是什么吗?我的游戏重新启动循环会导致我不知道的问题吗?
提前谢谢你。
(我使用的是Win 7 64位,VS Express 2015和Monogame 3.6)
发布于 2017-07-02 10:56:32
你知道这个错误的原因是什么吗?我的游戏重新启动循环会导致我不知道的问题吗?
是。别这么做。你正在摧毁整个游戏对象只是为了重置游戏。这是一种非常糟糕的风格,因为它破坏了整个实例和与其相关的一切。如果在其中使用static变量,它们将留在内存中,这可能是您遇到的问题。
如果你想要重置你的游戏,只需编写一个Reset-method为一切,并调用这些。清理和良好的代码是您应该使用的东西,而不是可怕的黑客。
你能显示更多的代码吗,这样就有可能理解,哪里出了问题?
PS:永远不要写像while (continueGame == true)这样的东西,总是喜欢while (continueGame)。
发布于 2017-10-05 07:38:39
这个问题有可能是由于SharpDX对媒体文件本身的反应。例如,在作为MP3加载的XNA4.0(与相关SoundEffectInstance一起加载)下工作的SoundEffect文件可能会使MonoGame UWP下的游戏崩溃。(只有一个文件发生在我身上,但在开始崩溃时,我已经开始使用SoundEffectInstance了。)
因此,您是否尝试过重新编码相关的音频文件,例如通过像胆量这样的实用程序?虽然它本身可能无法解决内部问题(音频文件的某些元素破坏了SharpDX),但如果重新编码的文件一开始没有问题元素,那么这对您来说应该是一个有效的解决方案。
https://stackoverflow.com/questions/44744970
复制相似问题