3

过去我发现 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

在此先感谢您提供的任何帮助-我对此完全感到困惑,这是一个非常令人沮丧的错误。

4

1 回答 1

0

只是出于好奇,您能否尝试以稍微不同的方式加载音效。

SoundEffect effect = content.Load<SoundEffect>(String.Format(@"{0}", soundEffectPath))

过去我在不使用字符串文字时加载某些内容类型时遇到过问题。

于 2013-04-10T18:28:55.933 回答