2015-01-13 3 views
2

Я создал простое тестовое приложение с использованием MonoGame (версия 3.2, последний официальный на момент написания), но я не могу сделать приложение в полноэкранном режиме.MonoGame GraphicsDevice.DisplayMode не работает

Я нашел этот код в другом месте:

protected override void Initialize() 
{ 
    graphics.IsFullScreen = true; 
    graphics.PreferredBackBufferWidth = GraphicsDevice.DisplayMode.Width; 
    graphics.PreferredBackBufferHeight = GraphicsDevice.DisplayMode.Height; 
    graphics.ApplyChanges(); 

    Window.IsBorderless = true; 
    Window.Position = new Point(0, 0); 

    base.Initialize(); 
} 

Но проблема в том, что GraphicsDevice.DisplayMode всегда возвращает размер экрана 800x600. Кроме того, коллекция GraphicsAdapter.Adapters содержит только один адаптер с одним поддерживаемым режимом отображения (800x600).

В чем проблема? Мое текущее разрешение - 1920x1080, и я получаю те же результаты, если я подключу два монитора в качестве расширенного рабочего стола (это моя обычная настройка).

Update

В конце концов, я просто добавил ссылку на System.Windows.Forms и используется:

graphics.IsFullScreen = true; 
graphics.PreferredBackBufferWidth = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width; 
graphics.PreferredBackBufferHeight = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height; 
graphics.ApplyChanges(); 

Я до сих пор удивляюсь, почему MonoGame не обнаруживает каких-либо адаптеров/экранов правильно.

Обновление 2 Вопрос был исправлен в неофициальной сборке (на момент написания статьи), как указано в this answer.

+0

Попробуйте переместить этот код в конец вашего конструктора 'Game' – Vlad

+0

@ Vlad: это не сработает, потому что' GraphicsDevice' является нулевым внутри ctor (по крайней мере, в MonoGame, я думаю, что это ведет себя по-другому в XNA). – Lou

+0

Я только что установил 'graphics.IsFullScreen = true' и * nothing * else после' base.Initialize() 'и работает как ожидалось. Вы используете winforms для решения этой проблемы, поэтому я могу предположить, что вы используете Windows, а не Linux/Mac. Не возражаете ли вы подтвердить версию? Я создаю виртуальную машину и посмотрю – Joe

ответ

0

Попробуйте переместить код graphics после вызова base.Initialize - это потому, что система не инициализирована и не инициализируется некоторыми настройками по умолчанию. Обычно мы должны были хотеть, чтобы иметь возможность изменять графику в ходе игры (то есть после инициализации), в случае, если Пользователь изменяет любые настройки в игре.

+1

Не помогло. Фактически, «GraphicsDevice.DisplayMode» имеет значение 800x600 даже в методах «Обновить» и «Ничья». Он остается на 800x600 все время, даже если я hardcode 'graphics.PreferredBackBufferWidth' и' Height' для другого разрешения. – Lou

Смежные вопросы