Изображение сначала загружается, а потом нет?(XNA) - PullRequest
0 голосов
/ 15 ноября 2011

Я очень запутался в данный момент.

У меня есть следующий класс: (Просто часть класса):

 public class GUIWindow
{
    #region Static Fields
    //The standard image for windows.
    public static IngameImage StandardBackgroundImage;
    #endregion
}

IngameImage - это только один из моих собственных классов,но на самом деле он содержит Texture2D (и некоторые другие вещи).В другом классе я загружаю список GUIButtons путем десериализации XML-файла.

public static GUI Initializazion(string pXMLPath, ContentManager pConMan)
    {
        GUI myGUI = pConMan.Load<GUI>(pXMLPath);
        GUIWindow.StandardBackgroundImage = new   
        IngameImage(pConMan.Load<Texture2D>(myGUI.WindowStandardBackgroundImagePath),
                 Vector2.Zero, 1024, 600, 1, 0, Color.White, 1.0f,
                 true, false, false);
        System.Console.WriteLine("Image loaded? " +  
                                (GUIWindow.StandardBackgroundImage.ImageStrip != null));
        myGUI.Windows = pConMan.Load<List<GUIWindow>>(myGUI.GUIFormatXMLPath);
        System.Console.WriteLine("Windows loaded");

        return myGUI;
    }

Вот эта строка: System.Console.WriteLine ("Изображение загружено?" +
(GUIWindow.StandardBackgroundImage.ImageStrip!= ноль));Отпечатки "правда".Для загрузки GUIWindows мне нужен «пустой» конструктор, который выглядит так:

public GUIWindow()
    {
        Name = "";
        Buttons = new List<Button>();
        ImagePath = "";
        System.Console.WriteLine("Image loaded? (In win) " + 
                                (GUIWindow.StandardBackgroundImage.ImageStrip != null));
        //Image = new IngameImage(StandardBackgroundImage);
        //System.Console.WriteLine(
        //Image.IsActive = false;
        SelectedButton = null;
        IsActive = false;
    }

Как видите, я прокомментировал строки в конструкторе.Потому что: в противном случае это может привести к сбою.Здесь строка System.Console.WriteLine («Изображение загружено? (В win)» + + (GUIWindow.StandardBackgroundImage.ImageStrip! = Null));Ничего не печатается, просто происходит сбой со следующим сообщением об ошибке:

Создание содержимого сгенерировано NullReferenceException: для ссылки на объект не задан экземпляр объекта.

Почему это происходит?Прежде чем программа захочет загрузить список, она выводит «true».Но в конструкторе, поэтому при загрузке списка выводится «false».Кто-нибудь может сказать, пожалуйста, почему это происходит и как это исправить?

1 Ответ

2 голосов
/ 15 ноября 2011

Мое лучшее предположение об исключении NullReferenceException заключается в том, что GUIWindow.StandardBackgroundImage является нулевым, поэтому оно выдает это исключение при попытке доступа к GUIWindow.StandardBackgroundImage.ImageStrip.

.Если нет, вы должны быть.Я бы установил несколько точек останова и прошел бы по любому коду, который читает или пишет StandardBackgroundImage.

Действительно, хотя ваша организация может быть улучшена.Почему StandardBackgroundImage является статическим полем класса GUIWindow?Это должно быть поле класса, который его загружает - везде, где есть метод Initialization.Затем передайте его в конструктор GUIWindow.

Вы рассматриваете поле StandardBackgroundImage как глобальное и, таким образом, чувствуете влияние этого решения - некоторые вещи читают и модифицируют его, и вы не можетеследите за тем, в каком порядке они это делают.

Примите этот совет к глобалам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...