设置小于窗口大小的游戏大小

问题描述:

基本上我想要做的是在最大化的窗口中居中放置一个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视口)。

+0

你是在暗示将此代码添加到Game.Draw()方法的开始? –

+0

是的,正是:) –

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

这也让我很容易在视口周围渲染一个“花哨”的边框。

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

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