【问题标题】:Set the Game Size smaller than the Window Size将游戏大小设置为小于窗口大小
【发布时间】:2012-08-31 06:05:02
【问题描述】:

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

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

有什么帮助吗?

【问题讨论】:

    标签: c# xna


    【解决方案1】:

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

    【讨论】:

    • 您是否建议将此代码添加到 Game.Draw() 方法的开头?
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 2019-02-25
      • 1970-01-01
      • 2013-04-13
      • 1970-01-01
      • 2019-04-06
      • 2023-04-11
      相关资源
      最近更新 更多