Win 8 MonoGame - разрешение игры и разрешение экрана

В настоящее время я работаю над игрой Windows 8 для Магазина Windows (Monogame, C#). Я установил графику.PrerefferedBackBuffers на 1366x768. Ноутбук, который я использую в основном для разработки, не поддерживает это разрешение, также как и внешний монитор, подключенный к нему, однако все хорошо масштабируется, поэтому спрайты сжимаются или растягиваются на разных мониторах (это не работает, если игра перетаскивается на другой монитор во время работы). Мне нужно использовать мышь, чтобы перетаскивать игровые объекты, но я замечаю, что курсор мыши работает в разрешении монитора, делая что-то вроде:

 if(objectSprite.BoundingBox.Contains((int)mouseCursos.x, (int)mouseCursos.Y))
 {
        objectSprite.isHooked = true;
 }

не работает, так как координаты мыши всегда отличаются от координат игровых объектов. Как получить максимальное разрешение текущего монитора, чтобы я мог масштабировать координаты.

Обратите внимание, что GraphicsAdapter.DefaultAdapter.CurrentDisplayMode возвращает 800x600.

2 ответа

Решение

Так как приложения Metro по умолчанию являются полноэкранными (хотя они также могут быть привязаны), вы можете использовать следующие свойства из класса Window:

Window.ClientBounds.Width
Window.ClientBounds.Height

Надеюсь, это поможет.

В моем приложении MonoGame для Магазина Windows ClientBounds почему-то не существует, Window.Current почему-то имеет значение null, поэтому я использую этот подход:

            CoreApplicationView v = Windows.ApplicationModel.Core.CoreApplication.MainView;
        var bounds = v.CoreWindow.Bounds;
        double w = bounds.Width;
        double h = bounds.Height;
        switch (DisplayProperties.ResolutionScale)
        {
            case ResolutionScale.Scale140Percent:
                w = Math.Round(w * 1.4);
                h = Math.Round(h * 1.4);
                break;
            case ResolutionScale.Scale180Percent:
                w = Math.Round(w * 1.8);
                h = Math.Round(h * 1.8);
                break;
        }
        ScreenSize resolution = new ScreenSize(w, h);
        if (ApplicationView.Value == ApplicationViewState.FullScreenLandscape)
            resolution = new ScreenSize(w, h);
        else if (ApplicationView.Value == ApplicationViewState.FullScreenPortrait)
        {
            resolution = new ScreenSize(h, w);
        }
        else if (ApplicationView.Value == ApplicationViewState.Filled)
        {
            resolution = new ScreenSize(w + 320.0 + 22.0, h); //snapped mode grip
        }
Другие вопросы по тегам