声音管理器类中的NullReferenceException,简单的C#XNA

本文关键字:简单 C#XNA NullReferenceException 声音 管理器 | 更新日期: 2023-09-27 18:19:39

我有一个基本的声音管理器类,它源自一个在线示例:http://www.xnawiki.com/index.php?title=Basic_Sound_Manager_For_XNA_GS_3.0

问题是,每当我调用LoadSound(string assetName,string assetPath)方法时,我都会得到一个NullReferenceException。我猜这意味着内容管理器找不到指定的引用,并且返回null。不过,这对我来说没有意义,因为我引用的内容文件夹中肯定有声音。在我把健全管理转到另一个班之前,它起了作用。

以下是我的SoundManager类的相关代码片段:

public static class SoundManager
{
    // Class variables
    static Dictionary<string, SoundEffect> sounds = new Dictionary<string,
                                                             SoundEffect>();
    static Song currentSong;
    static ContentManager content;
    static float soundVolume = 1f;
    // Initialize: Load the game's content manager.
    public static void Initialize(Game game)
    {
        content = game.Content;
    }
    public static void LoadSound(string assetName)
    {
        LoadSound(assetName, assetName);
    }
    // Load a sound from a passed name into the dictionary
    public static void LoadSound(string assetName, string assetPath)
    {
        sounds.Add(assetName, content.Load<SoundEffect>(assetPath));
    }
}

行出现异常

sounds.Add(assetName, content.Load<SoundEffect>(assetPath));

在Game1的Initialize()方法中,我调用:

SoundManager.Initialize(this);

在Game1的LoadContent()方法中,我调用以下内容:

SoundManager.LoadSound("collision", "Sounds''collision");

Content.RootDirectory是"Content",并且在Content/sounds/ding.wav(资产名称冲突)处存在声音。我真的看不出这里有什么问题。如果有任何奇怪的范围问题,任何人都可以看到,请帮助,我有一个即将到来的最后期限。

声音管理器类中的NullReferenceException,简单的C#XNA

如果NRE在代码中,那么content必须为null:即InitializeLoadSound之前没有被调用。使用断点或一些快速调试来检查是否存在这种情况。