基本上我想做的是将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。无论我尝试调整大小,我都要么不能,因为它是只读的,或者它不会改变任何东西。
任何帮助?
答案 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