将游戏大小设置为小于窗口大小

时间:2012-09-06 12:06:10

标签: c# xna

基本上我想做的是将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;

我尝试过设置首选后台缓冲区,clientbounds大小,视口和displaymode。无论我尝试调整大小,我都要么不能,因为它是只读的,或者它不会改变任何东西。

任何帮助?

2 个答案:

答案 0 :(得分:2)

如果您想自定义窗口布局,可以尝试official WinForms sample。在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中的整个后备缓冲区,而不仅仅是视口(因此只需在视口中绘制一个平面矩形)。

答案 1 :(得分:1)

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

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

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

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