NullReferenceException в классе звукового менеджера, простой C # XNA - PullRequest
1 голос
/ 07 января 2012

У меня есть базовый класс менеджера звука, полученный из онлайн-примера: http://www.xnawiki.com/index.php?title=Basic_Sound_Manager_For_XNA_GS_3.0

Проблема в том, что всякий раз, когда я вызываю метод LoadSound (string assetName, string assetPath), я получаю исключение NullReferenceException. Я предполагаю, что это означает, что менеджер контента не может найти указанную ссылку и возвращает ноль. Это не имеет смысла для меня, поскольку в папке с контентом, на которую я ссылаюсь, есть определенные звуки Это работало до того, как я переместил управление звуком в отдельный класс.

Вот соответствующий фрагмент кода для моего класса 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));

В методе Initialize () Game1 я вызываю:

SoundManager.Initialize(this);

В методе LoadContent () Game1 я вызываю следующее:

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

Content.RootDirectory - это «Контент», и в content / sounds / ding.wav (столкновение имени ресурса) существует звук. Я серьезно не вижу здесь никаких проблем. Если есть какие-то странные проблемы с областью видимости, которые кто-либо может увидеть, пожалуйста, помогите, у меня приближается крайний срок.

1 Ответ

3 голосов
/ 07 января 2012

Если в вашем коде есть NRE, значит, content равно нулю: т. Е. Initialize не вызывается до LoadSound.Используйте точку останова или некоторую быструю отладку, чтобы убедиться, что это так.

...