构造函数将在LoadContent
之前调用。那时,您switch
声明中的行将全部分配给spriteTexture null
。
最简单的解决将是节省requestedMenuButtonType
价值,并把switch
语句(或含有switch
声明方法的调用)到LoadContent(在一个点的图标已经被加载后)。例如:
private static MenuButtonType savedMenuButtonType;
public MenuButton(int requestedX, int requestedY, int requestedWidth, int requestedHeight, MenuButtonType requestedMenuButtonType)
: base(requestedX, requestedY, requestedWidth, requestedHeight)
{
...
savedMenuButtonType = requestedMenuButtonType;
...
}
public static void LoadContent(ContentManager Content)
{
...
//Main Menu Icons
...
//About Menu Icons
...
spriteTexture = GetRequestedSpriteTexture();
}
private static Texture2D GetRequestedSpriteTexture()
{
switch (savedMenuButtonType)
{
case MenuButtonType.play:
return playButtonIcon;
break;
...
}
一个更好的解决方案可能是在某些Icon
类,它有自己的LoadContent
方法(这对于其特定Texture2D
调用LoadContent
)来包装Texture2D
秒。然后当调用LoadContent时,它会加载Texture2Ds而不会丢弃Icon引用。
public class Icon
{
private string mTextureName;
private Texture2D mTexture;
public Icon(string pTextureName)
{
mTextureName = pTextureName;
}
...
public void LoadContent(ContentManager Content)
{
mTexture = Content.Load<Texture2D>(mTextureName);
}
...
}
public class MenuButton : SpriteObject
{
private Icon spriteIcon;
//Different Icons, static for loading
private static Icon playButtonIcon = new Icon("Menu Items/Menu Buttons/PlayButtonIcon");
...
public MenuButton(int requestedX, int requestedY, int requestedWidth, int requestedHeight, MenuButtonType requestedMenuButtonType)
: base(requestedX, requestedY, requestedWidth, requestedHeight)
{
...
spriteIcon = playButtonIcon;
...
}
public void LoadContent(ContentManager Content)
{
...
playButtonIcon.LoadContent(Content);
...
}
}
-1这是一个坏主意。永远不要在类实例构造函数中调用加载内容。 – MattDavey 2012-04-02 09:00:00