从基类获取值的空引用异常
本文关键字:引用 异常 基类 获取 | 更新日期: 2023-09-27 18:14:33
我有一个小引擎(定义为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;
和
/// <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)。
任何想法?
您的代码有2种可能性,ScreenManager
为空,或(ScreenManager.GameInstance as Main)
为空。
对于第一种情况:
我认为你是从选项屏幕的构造函数中调用你的问题行,或者至少在屏幕管理器的AddScreen
方法被调用之前。
移动到屏幕的LoadContent
方法
第二种情况:
检查GameInstance
是否为Main
的一个实例
值得注意的是,这是你的代码所基于的gamestatmanagement样本。