我正在使用MonoGame 3.01和SwapChainBackgroundPanel编写Windows 8游戏以与XAML集成。 我的资产针对16:9宽高比进行了优化,但由于Win8设备分辨率的变化,我需要支持4:3。
目前我面临以下问题:
将游戏拖动到第二台显示器不会调整屏幕大小
_graphics.PreferredBackBufferWidth = (int)width;
_graphics.PreferredBackBufferHeight = (int)height;
_graphics.ApplyChanges();
在SwapChainBackgroundPanel(GamePage)中,我对尺寸变化作出反应
void GamePage_SizeChanged(object sender, SizeChangedEventArgs e)
{
Game.SetBackBuffer(e.NewSize.Width, e.NewSize.Height);
}
但没有任何反应,似乎只是初始化(在游戏初始化之后)应用了缓冲区更改。
在Windows 8上支持多种分辨率的最佳做法是什么(包括Snapped视图)?
编辑:只是为了澄清 - GamePage_SizeChanged正在执行它的_graphics.ApplyChanges()似乎没有任何效果
答案 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。