设置小于窗口大小的游戏大小
问题描述:
基本上我想要做的是在最大化的窗口中居中放置一个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。无论我尝试调整大小,我要么不能,因为它是只读的,或者它不会改变任何东西。
任何帮助?
答
如果您想自定义窗口布局,请尝试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中的整个backbuffer,而不仅仅是视口(所以只需绘制一个扁平的矩形acro视口)。
答
我已经使用rendertargets来解决过去的类似问题。 只需将您的场景渲染到渲染目标,然后将目标渲染到屏幕中心。
这也让我很容易在视口周围渲染一个“花哨”的边框。
当您在渲染事件/方法中计算渲染目标的渲染位置时,您可以处理调整大小。
约rendertargets一些更多的信息:http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series3/Render_to_texture.php
你是在暗示将此代码添加到Game.Draw()方法的开始? –
是的,正是:) –