图像先加载,然后不是吗? (XNA)

时间:2011-11-15 15:03:00

标签: xna c#

我对此刻非常困惑。

我有以下课程:(只是课程的一部分):

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

IngameImage只是我自己的一个类,但实际上它包含一个Texture2D(以及其他一些东西)。 在另一个类中,我通过反序列化XML文件来加载GUIButtons列表。

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(“Image loaded?”+
                                    (GUIWindow.StandardBackgroundImage.ImageStrip!= null)); 打印“真实”。 要加载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行(“Image loaded?(In win)”+                                     (GUIWindow.StandardBackgroundImage.ImageStrip!= null)); 不打印任何内容,它只是崩溃与以下错误消息:

  

构建内容引发NullReferenceException:对象引用未设置为对象实例。

为什么会这样? 在程序要加载List之前,它会打印“true”。但是在构造函数中,所以在加载列表时会打印“false”。 任何人都可以告诉我为什么会发生这种情况以及如何解决它?

1 个答案:

答案 0 :(得分:2)

我对NullReferenceException的最佳猜测是GUIWindow.StandardBackgroundImage为空,因此当您尝试访问GUIWindow.StandardBackgroundImage.ImageStrip时会抛出此异常。

您熟悉Visual Studio调试器吗?如果不是,你应该是。我设置了一些断点并逐步执行任何读取或写入StandardBackgroundImage的代码。

但是,真的,你的组织可以得到改善。为什么StandardBackgroundImageGUIWindow类的静态字段?它应该是加载它的类的字段 - 无论Initialization方法在哪里。然后将其传递给GUIWindow的构造函数。

您正在将StandardBackgroundImage字段视为全局,因此感受到该决定的影响 - 有些东西正在阅读和修改它,而您无法跟踪它们正在执行的顺序。

Take this advice on globals.