在MonoGame Windows 8 XAML应用程序中支持多种分辨率

时间:2013-03-10 22:36:09

标签: windows-8 xna winrt-xaml monogame

我正在使用MonoGame 3.01和SwapChainBackgroundPanel编写Windows 8游戏以与XAML集成。 我的资产针对16:9宽高比进行了优化,但由于Win8设备分辨率的变化,我需要支持4:3。

目前我面临以下问题:

  1. 将游戏拖动到第二台显示器不会调整屏幕大小

        _graphics.PreferredBackBufferWidth = (int)width;
        _graphics.PreferredBackBufferHeight = (int)height;
        _graphics.ApplyChanges();
    
  2. 在SwapChainBackgroundPanel(GamePage)中,我对尺寸变化作出反应

        void GamePage_SizeChanged(object sender, SizeChangedEventArgs e)
        {
            Game.SetBackBuffer(e.NewSize.Width, e.NewSize.Height);
        }
    

    但没有任何反应,似乎只是初始化(在游戏初始化之后)应用了缓冲区更改。

    1. 有没有办法保持纵横比而不是拉伸来填充,例如。通过letterboxing?
    2. 在Windows 8上支持多种分辨率的最佳做法是什么(包括Snapped视图)?

      编辑:只是为了澄清 - GamePage_SizeChanged正在执行它的_graphics.ApplyChanges()似乎没有任何效果

1 个答案:

答案 0 :(得分:0)

为什么不尝试将Client Size Changed Event添加到Game构造函数中。

示例:

public Game1()
{
    _graphics = new GraphicsDeviceManager(this);
    this.Windows.ClientSizeChanged += Window_ClientSizeChanged;
}

void Window_ClientSizeChanged(object sender, EventArgs e)
{
    int currentWidth = this.Window.ClientBounds.Width;
    int currentHeight = this.Windows.ClientBounds.Height;
}

您还可以通过将ViewChangeArgs与Windows8中的ApplicationViewState枚举进行比较,为ApplicationViewChanged添加事件处理程序以检测Snapped,Filled和Full ViewStates。您可以从_graphics.SwapChainPanel属性访问游戏的SwapChainBackgroundPanel。最后,您还有_graphics.GraphicsDevice.DisplayMode,它具有AspectRatio,Height,Width。