首先加载图像,然后是n't?(XNA)
本文关键字:XNA 加载 图像 然后 | 更新日期: 2023-09-27 18:14:57
我现在很困惑。
我有以下类:(只是类的一部分):
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("图像加载?"+
(GUIWindow.StandardBackgroundImage。= null));打印"true"。要加载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("图像加载?(赢)" +(GUIWindow.StandardBackgroundImage。= null));不打印任何东西,它只崩溃并显示以下错误消息:
构建内容抛出NullReferenceException:对象引用未设置为对象实例。
为什么会发生这种情况?在程序想要加载List之前,它打印"true"。但是在构造函数中,在加载列表时它打印"false"有人能告诉我为什么会发生这种情况以及如何解决它吗?
我对NullReferenceException的最佳猜测是GUIWindow.StandardBackgroundImage
为空,因此当您尝试访问GUIWindow.StandardBackgroundImage.ImageStrip
时,它会抛出此异常。
你熟悉Visual Studio调试器吗?如果没有,你应该有。我设置了一些断点,并逐步通过读取或写入StandardBackgroundImage
的任何代码。
说真的,你的组织是可以改进的。为什么StandardBackgroundImage
是GUIWindow
类的静态字段?它应该是加载它的类的一个字段-无论Initialization
方法在哪里。然后将它传递给GUIWindow的构造函数。
你把StandardBackgroundImage
字段当作一个全局变量,因此你可以感觉到这个决定的影响——有些东西正在读取和修改它,而你无法跟踪它们的顺序。