2013-08-13 2 views
1

Ребятам нужна помощь в решении этой проблемы. Я код в visual C# express 2010 и monogame 2.5, чтобы делать игру в окнах, загружать изображение с помощью Texture2D для игры и компилировать. Но когда я пытаюсь скомпилировать проект, он дает мне эту ошибку. В экземпляре объекта не задана ссылка на объект.Monogame Ссылка на объект не установлена ​​на ошибку экземпляра

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(); 

, но он не работает, до сих пор он дает эту ошибку.

Ссылка на объект не указывает на экземпляр объекта

ли я что-то пропустил или я должен установить что-то, чтобы решить эту проблему?

+0

Вы пробовали отладку? Может быть, какой-то базовый объект имеет значение null? – wudzik

+0

Вы имеете в виду отлаживать фреймворк? Если это так, нет. Я не пробовал. и я новичок в этой структуре моногейма. – murelocal

+0

Как правило, «Ссылка на объект, не установленная на экземпляр объекта», является исключением. Вы сказали, что это ошибка времени компиляции (а также «предупреждение» в одном месте). Пожалуйста, постарайтесь быть конкретными. –

ответ

1

Из информации, которую вы указали, это звучит так, как исключение выбрасывается из метода MonoGame Run.

Первым шагом в этом было бы получение дополнительной информации о причине. best способ сделать это будет построить MonoGame из источника, вместе с вашим проектом, в одном решении. Таким образом, когда генерируется исключение, отладчик будет прерываться в точном месте в MonoGame, когда возникает ошибка, и вы можете использовать отладчик, чтобы определить, в чем проблема.

Следующее-лучшее, что вы можете сделать, не требуя источника, - это просмотреть сведения об исключении из получить трассировку стека. Это, по крайней мере, скажет вам, какой метод отвечает за исключение. Оттуда вы можете найти его в the source code и посмотреть, предоставляет ли он дополнительную информацию.

(Для этого конкретного исключения, «ссылка на объект не указывает на экземпляр объекта», трассирование менее полезным, так как оно брошено в рамках .NET (предположительно из-за ошибки в MonoGame) , а не явно бросаются самой MonoGame из-за (например) ошибки в использовании API.)


Если бы я должен был догадаться тому причиной (и я), я бы предположил, что вы не настраиваете GraphicsDeviceManager правильно в конструкторе вашего класса Game1 (не как ваш конструктор работает до Run). И, вместо того, чтобы обнаруживать эту ситуацию и бросать информативное исключение, MonoGame пашет, пока не сработает.

Но это предполагает, что все остальное работает нормально. Это также может быть проблемой, например, когда MonoGame не может инициализировать графическое устройство по любой причине. Или множество других вещей, действительно ...

(Еще один вариант - попытаться построить свою игру против XNA и посмотреть, что дает результат.)

+0

Отличный ответ. Хотя, я бы предложил сначала получить трассировку стека, поскольку она намного проще, чем создание MonoGame из источника. – craftworkgames

+0

Действительный пункт. Хотя ИМО, имея источник, стоит того, потому что, хотя это больше усилий, инвестиции, скорее всего, продолжат окупаться в будущем. (Прошло некоторое время с тех пор, как я построил MonoGame из источника, но не для Windows, поэтому я мог бы недооценивать, насколько это сложно). –

0

В моей версии Monogame проекта по умолчанию всегда начинается так:

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

Это похоже на работу.