0

基本上我想做的是将一个 800x600 的游戏放在一个最大化的窗口中。所以如果分辨率是1280x1024的话会有很大的边框,但是如果分辨率是800x600的话会占满整个屏幕

这是在 Initialize 方法中,它使游戏窗口全屏并带有固定的 3d 边框,但客户区也调整为全屏

Form gameWindowForm = (Form)sys.Form.FromHandle(this.Window.Handle);
gameWindowForm.FormBorderStyle = FormBorderStyle.Fixed3D;
gameWindowForm.Text = "";
gameWindowForm.ControlBox = false;
gameWindowForm.WindowState = sys.FormWindowState.Maximized;

我尝试设置首选后台缓冲区、客户端边界大小、视口和显示模式。无论我尝试调整什么大小我都不能,因为它是只读的,或者它不会改变任何东西。

有什么帮助吗?

4

2 回答 2

2

如果您想自定义窗口布局,不妨试试官方的 WinForms 示例。XNA 中没有“官方”方式来处理窗口中的客户区。

但是,如果您想要做的只是在窗口中居中渲染区域,那么您应该能够通过在每一帧的开头设置视口来做到这一点,如下所示:

int width = GraphicsDevice.PresentationParameters.BackBufferWidth;
int height = GraphicsDevice.PresentationParameters.BackBufferHeight;
GraphicsDevice.Viewport = new Viewport(
        width/2 - 800/2, height/2 - 600/2, 800, 600);

(请注意,如果您的窗口变得太小并且视口超出屏幕大小,则此代码将失败 - 因此您需要检查并做出响应 - 也许通过使用较小的视口。)

请记住,这GraphicsDevice.Clear将清除 XNA 4.0 中的整个后缓冲区,而不仅仅是视口(因此只需在视口上绘制一个纯色矩形)。

于 2012-09-06T12:45:37.950 回答
1

我过去曾使用渲染目标来解决一个类似的问题。只需将场景渲染到渲染目标,然后将目标渲染到屏幕中心。

这也让我可以轻松地在视口周围渲染一个“精美”的边框。

当您在渲染事件/方法中计算渲染目标的渲染位置时,您可以处理调整大小。

有关渲染目标的更多信息: http ://www.riemers.net/eng/Tutorials/XNA/Csharp/Series3/Render_to_texture.php

于 2012-09-06T12:55:02.363 回答