У меня есть небольшой движок (определенный как public class ScreenManager : DrawableGameComponent
) для управления вводом и экранами (с переходами и т. Д.), Который работает с public abstract class GameScreen
.Для экранов меню у меня есть abstract class MenuScreen : GameScreen
.Я пытаюсь получить из class OptionsMenuScreen : MenuScreen
значение, хранящееся в основном классе игры (тот, который вызывается Program.cs), но я всегда получаю исключение NullReferenceException.Мне нужно это значение, потому что при запуске приложения мне нужно получить некоторые параметры, и эти параметры можно изменить из OptionsMenuScreen, но я хочу, чтобы изменения с этого экрана автоматически отражались на остальной части приложения, поэтому экран может основывать свои вычисления на этом значениибез необходимости перезагружать все приложение, чтобы значения в основном классе обновлялись.Я делаю это с
public ScreenManager ScreenManager
{
get { return screenManager; }
internal set { screenManager = value; }
}
ScreenManager screenManager;
в GameScreen.cs и
/// <summary>
/// Adds a new screen to the screen manager.
/// </summary>
public void AddScreen(GameScreen screen, PlayerIndex? controllingPlayer)
{
screen.ControllingPlayer = controllingPlayer;
screen.ScreenManager = this;
screen.IsExiting = false;
// If we have a graphics device, tell the screen to load content.
if (isInitialized)
{
screen.LoadContent();
}
screens.Add(screen);
// update the TouchPanel to respond to gestures this screen is interested in
TouchPanel.EnabledGestures = screen.EnabledGestures;
}
в качестве метода добавления экрана в список экранов ScreenManager.Но когда я пытаюсь сделать что-то вроде
separateAxis = (ScreenManager.GameInstance as Main).SeparateAxis;
, я всегда получаю NullReferenceException.Несмотря на то, что он работает с других экранов (производных непосредственно от GameScreen, а не MenuScreen).
Есть идеи?