【问题标题】:Monogame Object reference not set to an instance errorMonogame 对象引用未设置为实例错误
【发布时间】:2013-08-13 06:47:24
【问题描述】:

伙计们需要一段时间来解决这个问题。我在visual C# express 2010和monogame 2.5中编写代码以在windows中制作游戏,使用Texture2D为游戏加载一些图像并编译。但是当我尝试编译项目时,它给了我这个错误。对象引用未设置为对象的实例。

    private static Game1 game;

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        game = new Game1();
        game.Run();//This line gives the warning
    }
}

我试试这个代码

Game1 game = new Game1();
game.Run();

但它不起作用,仍然出现此错误。

对象引用未设置为对象的实例

我错过了什么还是应该安装一些东西来解决这个问题?

【问题讨论】:

  • 你试过调试吗?也许某些底层对象为空?
  • 你的意思是自己调试框架?如果是这样,不。我没试过。我是这个单人游戏框架的新手。
  • 通常“对象引用未设置为对象的实例”是运行时异常。您已经说过这是一个编译时错误(在一个地方也是一个“警告”)。请尽量具体。

标签: c# xna-4.0 monogame visual-c#-express-2010


【解决方案1】:

根据您提供的信息,听起来异常是从 MonoGame 的 Run 方法中抛出的。

解决此问题的第一步是获取有关原因的更多信息。 最好的方法是在一个解决方案中从源代码构建 MonoGame 以及您的项目。这样,当抛出异常时,调试器将在 MonoGame 中发生错误的确切位置中断,您可以使用调试器来确定问题所在。

接下来最好的方法是查看异常的详细信息以获取堆栈跟踪,您无需源即可做到这一点。这至少会告诉你什么方法导致了异常。从那里您可以在the source code 中查找它,看看它是否提供了任何其他信息。

(对于这个特殊异常,“对象引用未设置为对象的实例”,堆栈跟踪的帮助较小,因为它被 .NET 框架抛出(可能是由于MonoGame 中的错误),而不是由于(例如)API 使用错误而由 MonoGame 本身明确抛出。)


如果我必须猜测原因(我确实这样做了),我猜你没有在你的构造函数中正确设置GraphicsDeviceManager Game1 类(注意构造函数在 Run 之前的运行方式)。而且,MonoGame 并没有检测到这种情况并引发信息异常,而是继续进行直到崩溃。

但这假设其他一切都正常工作。这也可能是一个问题,例如,MonoGame 出于某种原因无法初始化图形设备。或者很多其他的东西,真的......

(另一种选择可能是尝试针对 XNA 构建您的游戏,看看会产生什么结果。)

【讨论】:

  • 很好的答案。不过,我会建议先获取堆栈跟踪,因为它比从源代码构建 MonoGame 要简单得多。
  • 一个有效的点。尽管 IMO 拥有资源是值得的,因为尽管前期付出更多努力,但未来的投资可能会继续得到回报。 (不过,我从源代码构建 MonoGame 已经有一段时间了,而且不是为 Windows 构建的,所以我可能低估了它的难度。)
【解决方案2】:

在我的 Monogame 版本中,默认项目总是这样开始:

 static void Main()
        {
            using (var myGame = new Game1())
                myGame.Run();
        }

这似乎有效。

【讨论】:

    猜你喜欢
    • 2011-07-09
    • 2012-08-31
    • 2011-11-21
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    相关资源
    最近更新 更多