我一直在尝试使用monogame和c#实现事件。目前,当我调整窗口大小时,我会调用一个事件:
this.Window.ClientSizeChanged += new EventHandler<EventArgs>(Window_ClientSizeChanged);
void Window_ClientSizeChanged(object sender, EventArgs e)
{
int width = Window.ClientBounds.Width;
int height = Window.ClientBounds.Height;
if (width > 0 && height > 0)
{
graphics.PreferredBackBufferWidth = width;
graphics.PreferredBackBufferHeight = height;
graphics.ApplyChanges();
}
}
这一切都很好并正确调整窗口大小并更新宽度/高度。但是,如果通过用户单击窗口框架上的最大化/最小化按钮来调整窗口大小,则不会触发它。
花了一些时间研究一些解决方案后,实现最大化事件的唯一建议来自here:
Form form = (Form)Control.FromHandle(Window.Handle);
form.WindowState = FormWindowState.Maximized;
然而,这是一个我不是特别喜欢的解决方案,因为它依赖于 System.Windows.Forms 的包含,因为我可能有一天想要为其他平台构建id而不是包含任何特定的Windows库。
是否有任何单一游戏功能可以处理每个平台的最大化/最小化事件调用,还是由最终用户实现此类功能?
答案 0 :(得分:1)
我也遇到过这个问题,并且在MonoGame API中没有找到任何“内置”解决方案。
我想出的解决方案是在每个帧的开头检查Window.ClientBounds
的宽度和高度是否发生了变化。
它会检测与Window.ClientSizeChanged
事件类似的所有窗口大小调整,但也会检测通过最大化/恢复窗口所做的调整大小。