过去我发现 StackOverflow 是一个非常有用的参考,现在我遇到了自己的障碍,我想我会尝试在这里发帖。
我的问题是,每当我的游戏尝试加载 SoundEffect 文件时,它都会因 InvalidOperationException 而崩溃(详细消息:发生了意外错误)。这个游戏是在 XNA 4.0 框架上用 C# 编写的,Visual Studio 2010 express 作为我的 IDE。加载的音效都是 .wav 文件,并添加到游戏的 Content 项目中。
我检查了董事会并尝试了以下建议:
- 确认它设置的 content.rootDirectory - 它设置为“内容”
- 确认 content.load<> 正在通过正确的路径访问资源。使用反射,我得到了应用程序的当前目录,然后使用了根目录+它试图访问的路径。该文件肯定存在,可访问,并且位于该位置。
- 确保 ContentManager 内容不为空 - 使用调试确认,无论如何都会引发不同的异常。
- 确认 WAV 是 8 位或 16 位 PCM。确认的。
- 可能的标头损坏?此错误发生在我尝试加载的任何和所有音效上,因此它不是与一个文件有关的标题问题。
奇怪的是,这个错误似乎无处不在。过去一周它工作正常,今天它吓坏了——我没有做任何会影响内容加载过程的更改。
这是引发错误的代码:
public void LoadSoundEffect(ContentManager content, String assetPath)
{
if (content != null && String.IsNullOrEmpty(assetPath) == false)
{
// This next line throws the exception.
SoundEffect effectLoader = content.Load<SoundEffect>(assetPath);
soundLibrary.Add(assetPath, effectLoader);
}
}
这是堆栈跟踪:
在 Microsoft.Xna.Framework.Helpers.ThrowExceptionFromErrorCode(Int32 错误) 在 Microsoft.Xna.Framework.Audio.SoundEffect.AllocateFormatAndData(Byte[] 格式, Byte[] > data, Int32 offset, Int32 count) 在 Microsoft.Xna.Framework .Audio.SoundEffect.Create(Byte[] format, Byte[] data, Int32 offset, Int32 count, Int32 loopStart, Int32 loopLength, TimeSpan duration) at Microsoft.Xna.Framework.Audio.SoundEffect..ctor(Byte[] 格式, Byte[] data, Int32 loopStart, Int32 loopLength, TimeSpan duration) at Microsoft.Xna.Framework.Content.SoundEffectReader.Read(ContentReader input, SoundEffect existingInstance) at Microsoft.Xna.Framework.Content.ContentReader.InvokeReader[T]( Microsoft.Xna.Framework.Content.ContentReader 上的 ContentTypeReader 阅读器,Object existingInstance)。ReadObjectInternal[T](Object existingInstance) 在 Microsoft.Xna.Framework.Content.ContentReader.ReadObjectT 在 Microsoft.Xna.Framework.Content.ContentReader.ReadAssetT 在 Microsoft.Xna.Framework.Content.ContentManager.ReadAsset[T](字符串assetName , Action`1 recordDisposableObject) 在 Microsoft.Xna.Framework.Content.ContentManager.Load[T](String assetName) 在 SerializableDataTypes.AudioManager.LoadSoundEffect(ContentManager content, String assetPath) 在 C:\Users\Mike\Documents\Visual Studio 2010\Projects\Res Judicata Chapter1\SerializableDataTypes\Script Elements\AudioManager.cs:第 78 行Action`1 recordDisposableObject) 在 Microsoft.Xna.Framework.Content.ContentManager.Load[T](String assetsName) 在 SerializableDataTypes.AudioManager.LoadSoundEffect(ContentManager content, String assetPath) 在 C:\Users\Mike\Documents\Visual Studio 2010 \Projects\Res Judicata Chapter1\SerializableDataTypes\Script Elements\AudioManager.cs:line 78Action`1 recordDisposableObject) 在 Microsoft.Xna.Framework.Content.ContentManager.Load[T](String assetsName) 在 SerializableDataTypes.AudioManager.LoadSoundEffect(ContentManager content, String assetPath) 在 C:\Users\Mike\Documents\Visual Studio 2010 \Projects\Res Judicata Chapter1\SerializableDataTypes\Script Elements\AudioManager.cs:line 78
在此先感谢您提供的任何帮助-我对此完全感到困惑,这是一个非常令人沮丧的错误。