Конструктор будет вызываться до LoadContent
. В это время все строки в вашем операторе switch
будут назначать null
для spriteTexture.
Самым простым решением было бы сохранить значение 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;
...
}
Лучшим решением может быть обтекание Texture2D
в некотором классе Icon
, который имеет собственный метод LoadContent
(который вызывает LoadContent
для своего конкретного Texture2D
). Затем, когда вызывается LoadContent, он загружает Texture2D, не выбрасывая ссылки 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);
...
}
}